Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Leopard <mleopard@gitlab.com>2018-12-17 15:34:04 +0300
committerMichael Leopard <mleopard@gitlab.com>2018-12-17 15:34:04 +0300
commitf0c846d49c909b8052a8d1334a154a16fb27d187 (patch)
tree05d71e72916715cdaaabd1beda43af3460509213
parentb840993d267945b4441a79ce888575d4d4bac614 (diff)
parentf6cd55357ba39f720f6adbdd36d8a7b46f29b545 (diff)
Merge branch 'master' into 1293-re-implement-findbranch-in-go
-rw-r--r--CHANGELOG.md10
-rw-r--r--VERSION2
-rw-r--r--_support/gitlab-git-test.git-packed-refs20
-rw-r--r--_support/gitlab-test.git-packed-refs94
-rw-r--r--_support/makegen.go8
-rw-r--r--doc/test_repos.md18
-rw-r--r--internal/git/objectpool/link.go45
-rw-r--r--internal/git/objectpool/link_test.go9
-rw-r--r--internal/git/objectpool/pool.go2
-rw-r--r--internal/git/objectpool/remote.go21
-rw-r--r--internal/git/objectpool/remote_test.go23
-rw-r--r--internal/service/blob/lfs_pointers_test.go18
-rw-r--r--internal/service/objectpool/create_test.go4
-rw-r--r--internal/service/objectpool/link.go8
-rw-r--r--internal/service/objectpool/link_test.go9
-rw-r--r--internal/testhelper/testhelper.go2
-rw-r--r--vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/objectpool.pb.go47
-rw-r--r--vendor/vendor.json10
18 files changed, 314 insertions, 36 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 288c6d3c6..5ad53123a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,15 @@
# Gitaly changelog
+## v1.9.0
+
+#### Changed
+- Improve Linking and Unlink object pools RPC
+ https://gitlab.com/gitlab-org/gitaly/merge_requests/1000
+
+#### Other
+- Fix tests failing due to test-repo change
+ https://gitlab.com/gitlab-org/gitaly/merge_requests/1004
+
## v1.8.0
#### Other
diff --git a/VERSION b/VERSION
index 27f9cd322..f8e233b27 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.8.0
+1.9.0
diff --git a/_support/gitlab-git-test.git-packed-refs b/_support/gitlab-git-test.git-packed-refs
new file mode 100644
index 000000000..4fed4130f
--- /dev/null
+++ b/_support/gitlab-git-test.git-packed-refs
@@ -0,0 +1,20 @@
+# pack-refs with: peeled fully-peeled sorted
+0b4bc9a49b562e85de7cc9e834518ea6828729b9 refs/heads/feature
+12d65c8dd2b2676fa3ac47d955accc085a37a9c1 refs/heads/fix
+6473c90867124755509e100d0d35ebdc85a0b6ae refs/heads/fix-blob-path
+58fa1a3af4de73ea83fe25a1ef1db8e0c56f67e5 refs/heads/fix-existing-submodule-dir
+40f4a7a617393735a95a0bb67b08385bc1e7c66d refs/heads/fix-mode
+9abd6a8c113a2dd76df3fdb3d58a8cec6db75f8d refs/heads/gitattributes
+46e1395e609395de004cacd4b142865ab0e52a29 refs/heads/gitattributes-updated
+4b4918a572fa86f9771e5ba40fbd48e1eb03e2c6 refs/heads/master
+5937ac0a7beb003549fc5fd26fc247adbce4a52e refs/heads/merge-test
+c54ad072fabee9f7bf9b2c6c67089db97ebfbecd refs/heads/rd-add-file-larger-than-1-mb
+4b4918a572fa86f9771e5ba40fbd48e1eb03e2c6 refs/heads/Ääh-test-utf-8
+f4e6814c3e4e7a0de82a9e7cd20c626cc963a2f8 refs/tags/v1.0.0
+^6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9
+8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b refs/tags/v1.1.0
+^5937ac0a7beb003549fc5fd26fc247adbce4a52e
+10d64eed7760f2811ee2d64b44f1f7d3b364f17b refs/tags/v1.2.0
+^eb49186cfa5c4338011f5f590fac11bd66c5c631
+2ac1f24e253e08135507d0830508febaaccf02ee refs/tags/v1.2.1
+^fa1b1e6c004a68b7d8763b86455da9e6b23e36d6
diff --git a/_support/gitlab-test.git-packed-refs b/_support/gitlab-test.git-packed-refs
new file mode 100644
index 000000000..42df2144a
--- /dev/null
+++ b/_support/gitlab-test.git-packed-refs
@@ -0,0 +1,94 @@
+# pack-refs with: peeled fully-peeled sorted
+e56497bb5f03a90a51293fc6d516788730953899 refs/heads/'test'
+1b12f15a11fc6e62177bef08f47bc7b5ce50b141 refs/heads/100%branch
+1942eed5cc108b19c7405106e81fa96125d0be22 refs/heads/1942eed5cc108b19c7405106e81fa96125d0be22
+bf12d2567099e26f59692896f73ac819bae45b00 refs/heads/2-mb-file
+b89b56d795dcf0351e9d627b58fd2fc67616da05 refs/heads/add-balsamiq-file
+93ee73207dcfa56fe60ab8245e0623160ab8b212 refs/heads/add-ipython-files
+e774ebd33ca5de8e6ef1e633fd887bb52b9d0a7a refs/heads/add-pdf-file
+79faa7bfb522480533f4d60368d8f6ecc1e03d9b refs/heads/add-pdf-text-binary
+010d10642f5950c8d5041f0469593ccc5c646521 refs/heads/add_images_and_changes
+ba3faa7dbecdb555c748b36e8bc0f427e69de5e7 refs/heads/after-create-delete-modify-move
+77e835ef0856f33c4f0982f84d10bdb0567fe440 refs/heads/author-committer-different
+845009f4d7bdc9e0d8f26b1c6fb6e108aaff9314 refs/heads/before-create-delete-modify-move
+ef16b8d2b204706bd8dc211d4011a5bffb6fc0c2 refs/heads/big-files
+7b1cf4336b528e0f3d1d140ee50cafdbc703597c refs/heads/binary-encoding
+4e07b243e436fd6ca00ca421fa507daad3310839 refs/heads/blob-with-tricky-encoding
+498214de67004b1da3d820901307bed2a68a8ef6 refs/heads/branch-merged
+259a6fba859cc91c54cd86a2cbd4c2f720e3a19d refs/heads/conflict-binary-file
+78a30867c755d774340108cdad5f11254818fb0c refs/heads/conflict-contains-conflict-markers
+eb227b3e214624708c474bdab7bde7afc17cefcc refs/heads/conflict-missing-side
+d0a293c0ac821fadfdc086fe528f79423004229d refs/heads/conflict-non-utf8
+1450cd639e0bc6721eb02800169e464f212cde06 refs/heads/conflict-resolvable
+824be604a34828eb682305f0d963056cfac87b2d refs/heads/conflict-start
+39fa04f48a13ea003c4db3623b4decc9df887c48 refs/heads/conflict-too-large
+5b4bb08538b9249995b94aa69121365ba9d28082 refs/heads/conflict_branch_a
+f0f390655872bb2772c85a0128b2fbc2d88670cb refs/heads/conflict_branch_b
+593890758a6f845c600f38ffa05be2749211caee refs/heads/crlf-diff
+3dd08961455abf80ef9115f4afdc1c6f968b503c refs/heads/csv
+1eda481c3d5499e81cbbe15d34c53282e87627d2 refs/heads/custom-encoding
+6c177980d2073c20c4e4f0f45253a5500f1b23e1 refs/heads/deleted-image-test
+7efb185dd22fd5c51ef044795d62b7847900c341 refs/heads/empty-branch
+98b0d8b3aec8e7f7b339fd40c446ad22cbc565fe refs/heads/ends-with.json
+4842455ecb8ec1428d0e83ee6389885bf98919d3 refs/heads/expand-collapse-diffs
+025db92c6c720f030b936133cb44a16de3445daa refs/heads/expand-collapse-files
+238e82dcc48eebf0036fdd23dd234ee950f0e0d3 refs/heads/expand-collapse-lines
+0b4bc9a49b562e85de7cc9e834518ea6828729b9 refs/heads/feature
+1a35b5a77cf6af7edf6703f88e82f6aff613666f refs/heads/feature-and-encoding
+8309e68585b28d61eb85b7e2834849dda6bf1733 refs/heads/feature-encoding-conflict
+5a62481d563af92b8e32d735f2fa63b94e806835 refs/heads/feature.custom-highlighting
+bb5206fee213d983da88c47f9cf4cc6caf9c66dc refs/heads/feature_conflict
+0031876facac3f2b2702a0e53a26e89939a42209 refs/heads/few-commits
+06041ab2037429d243a38abb55957818dd9f948d refs/heads/file-mode-change
+48f0be4bd10c1decee6fae52f9ae6d10f77b60f4 refs/heads/fix
+ce369011c189f62c815f5971d096b26759bab0d1 refs/heads/flat-path
+d25b6d94034242f3930dfcfeb6d8d9aac3583992 refs/heads/flat-path-2
+e56497bb5f03a90a51293fc6d516788730953899 refs/heads/flatten-dirs
+ab2c9622c02288a2bbaaf35d96088cfdff31d9d9 refs/heads/gitaly-diff-stuff
+0999bb770f8dc92ab5581cc0b474b3e31a96bf5c refs/heads/gitaly-non-utf8-commit
+94bb47ca1297b7b3731ff2a36923640991e9236f refs/heads/gitaly-rename-test
+cb19058ecc02d01f8e4290b7e79cafd16a8839b6 refs/heads/gitaly-stuff
+e63f41fe459e62e1228fcef60d7189127aeba95a refs/heads/gitaly-test-ref
+c809470461118b7bcab850f6e9a7ca97ac42f8ea refs/heads/gitaly-windows-1251
+5937ac0a7beb003549fc5fd26fc247adbce4a52e refs/heads/improve/awesome
+7df99c9ad5b8c9bfc5ae4fb7a91cc87adcce02ef refs/heads/jv-conflict-1
+bd493d44ae3c4dd84ce89cb75be78c4708cbd548 refs/heads/jv-conflict-2
+d23bddc916b96c98ff192e198b1adee0f6871085 refs/heads/many_files
+0ed8c6c6752e8c6ea63e7b92a517bf5ac1209c80 refs/heads/markdown
+1e292f8fedd741b75372e19097c76d327140c312 refs/heads/master
+646ece5cfed840eca0a4feb21bcd6a81bb19bda3 refs/heads/merge-commit-analyze-after
+21751bf5cb2b556543a11018c1f13b35e44a99d7 refs/heads/merged-target
+46abbb087fcc0fd02c340f0f2f052bd2c7708da3 refs/heads/moar-lfs-ptrs
+b83d6e391c22777fca1ed3012fce84f633d7fed0 refs/heads/not-merged-branch
+b83d6e391c22777fca1ed3012fce84f633d7fed0 refs/heads/not-mergéd-branch
+45127a93e4fa99ee1709a3a9aed3d677d78cbf1b refs/heads/orphaned-branch
+7897d5b9c5e420760eb63782ebae25371ad2325c refs/heads/pages-deploy
+7975be0116940bf2ad4321f79d02a55c5f7779aa refs/heads/pages-deploy-target
+fe42f41cdc7ca97ae200fb50a268431add95901a refs/heads/png-lfs
+c84ff944ff4529a70788a5e9003c2b7feae29047 refs/heads/rd-add-file-larger-than-1-mb
+ca47bfd5e930148c42ed74c3b561a8783e381f7f refs/heads/rebase-encoding-failure-trigger
+6101e87e575de14b38b4e1ce180519a813671e10 refs/heads/signed-commits
+ba3343bc4fa403a8dfbfcab7fc1a8c29ee34bd69 refs/heads/spooky-stuff
+35236eac0ce603467ba37d2f99cb591df4cb8f63 refs/heads/squash-encoding-error-trigger
+54cec5282aa9f21856362fe321c800c236a61615 refs/heads/squash-large-files
+b491b929a311ca258a0731e58d73b7b089c7c358 refs/heads/submodule_inside_folder
+81e6355ce4e1544a3524b230952c12455de0777b refs/heads/symlink-expand-diff
+899d3d27b04690ac1cd9ef4d8a74fde0667c57f1 refs/heads/test-do-not-touch
+304d257dcb821665ab5110318fc58a007bd104ed refs/heads/two-commits
+2f61d70f862c6a4f782ef7933e020a118282db29 refs/heads/use-gitlab-shell-v-6-0-1
+de78448b0b504f3f60093727bddfda1ceee42345 refs/heads/use-gitlab-shell-v-6-0-3
+f05a98786e4274708e1fa118c7ad3a29d1d1b9a3 refs/heads/utf-16
+816c271cd6398818b04f974780a2b87162718c80 refs/heads/utf-16-2
+4451372901c41a32f985a54c526da03ce8312291 refs/heads/utf-dir
+b83d6e391c22777fca1ed3012fce84f633d7fed0 refs/heads/v1.1.0
+f3ec7ba3fd368de6663df341bc25f6bb2fa18135 refs/heads/very-large-diff-ordered
+88790590ed1337ab189bccaa355f068481c90bec refs/heads/video
+b9238ee5bf1d7359dd3b8c89fd76c1c7f8b75aba refs/heads/wip
+219560e1a2bd7db7753f179a164483761089a53b refs/heads/with-codeowners
+6b8dc4a827797aa025ff6b8f425e583858a10d4f refs/heads/with-executables
+7975be0116940bf2ad4321f79d02a55c5f7779aa refs/heads/Ääh-test-utf-8
+e63f41fe459e62e1228fcef60d7189127aeba95a refs/heads/ʕ•ᴥ•ʔ
+f4e6814c3e4e7a0de82a9e7cd20c626cc963a2f8 refs/tags/v1.0.0
+^6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9
+8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b refs/tags/v1.1.0
+^5937ac0a7beb003549fc5fd26fc247adbce4a52e
diff --git a/_support/makegen.go b/_support/makegen.go
index 949fed8f3..202357cc7 100644
--- a/_support/makegen.go
+++ b/_support/makegen.go
@@ -289,9 +289,17 @@ binaries: assemble
git clone --bare --quiet https://gitlab.com/gitlab-org/gitlab-test.git $@
# Git notes aren't fetched by default with git clone
git -C $@ fetch origin refs/notes/*:refs/notes/*
+ rm -rf $@/refs
+ mkdir -p $@/refs/heads $@/refs/tags
+ cp {{ .SourceDir }}/_support/gitlab-test.git-packed-refs $@/packed-refs
+ git -C $@ fsck --no-progress
{{ .GitTestRepo }}:
git clone --bare --quiet https://gitlab.com/gitlab-org/gitlab-git-test.git $@
+ rm -rf $@/refs
+ mkdir -p $@/refs/heads $@/refs/tags
+ cp {{ .SourceDir }}/_support/gitlab-git-test.git-packed-refs $@/packed-refs
+ git -C $@ fsck --no-progress
.PHONY: prepare-tests
prepare-tests: {{ .TestRepo }} {{ .GitTestRepo }} ../.ruby-bundle
diff --git a/doc/test_repos.md b/doc/test_repos.md
new file mode 100644
index 000000000..96ad9f06d
--- /dev/null
+++ b/doc/test_repos.md
@@ -0,0 +1,18 @@
+# Repositories used by the Gitaly test suite
+
+Gitaly uses two test repositories. One should be enough but we got a
+second one for free when importing code from gitlab-ce.
+
+These repositories get cloned by `make prepare-tests`. They end up in:
+
+- `internal/testhelper/testdata/data/gitlab-test.git`
+- `internal/testhelper/testdata/data/gitlab-git-test.git`
+
+To prevent fragile tests, we use fixed `packed-refs` files for these
+repositories. They get installed by make (see `_support/makegen.go`)
+from files in `_support`.
+
+To update `packed-refs` run `git gc` in your test repo and copy the new
+`packed-refs` to the right location in `_support`.
+
+**TODO** define workflow "for dummies" to update packed-refs.
diff --git a/internal/git/objectpool/link.go b/internal/git/objectpool/link.go
index 284556e76..c212593b7 100644
--- a/internal/git/objectpool/link.go
+++ b/internal/git/objectpool/link.go
@@ -2,18 +2,20 @@ package objectpool
import (
"context"
+ "fmt"
"io/ioutil"
"os"
"path/filepath"
- "gitlab.com/gitlab-org/gitaly/internal/git/repository"
+ "gitlab.com/gitlab-org/gitaly-proto/go/gitalypb"
+ "gitlab.com/gitlab-org/gitaly/internal/git"
"gitlab.com/gitlab-org/gitaly/internal/helper"
)
// Link will write the relative path to the object pool from the repository that
// is to join the pool. This does not trigger deduplication, which is the
// responsibility of the caller.
-func (o *ObjectPool) Link(ctx context.Context, repo repository.GitRepo) error {
+func (o *ObjectPool) Link(ctx context.Context, repo *gitalypb.Repository) error {
altPath, err := alternatesPath(repo)
if err != nil {
return err
@@ -29,11 +31,36 @@ func (o *ObjectPool) Link(ctx context.Context, repo repository.GitRepo) error {
return err
}
+ remoteName := repo.GetGlRepository()
+ for k, v := range map[string]string{
+ fmt.Sprintf("remote.%s.url", remoteName): relPath,
+ fmt.Sprintf("remote.%s.fetch", remoteName): fmt.Sprintf("+refs/*:refs/remotes/%s/*", remoteName),
+ fmt.Sprintf("remote.%s.tagOpt", remoteName): "--no-tags",
+ } {
+ if err := o.setConfig(ctx, k, v); err != nil {
+ return err
+ }
+ }
+
return ioutil.WriteFile(altPath, []byte(filepath.Join(relPath, "objects")), 0644)
}
// Unlink removes the alternates file, so Git won't look there anymore
-func Unlink(ctx context.Context, repo repository.GitRepo) error {
+// It removes the remote from the object pool too,
+func (o *ObjectPool) Unlink(ctx context.Context, repo *gitalypb.Repository) error {
+ if !o.Exists() {
+ return nil
+ }
+
+ // We need to use removeRemote, and can't leverage `git config --remove-section`
+ // as the latter doesn't clean up refs
+ remoteName := repo.GetGlRepository()
+ if err := o.removeRemote(ctx, remoteName); err != nil {
+ if present, err2 := o.hasRemote(ctx, remoteName); err2 != nil || present {
+ return err
+ }
+ }
+
altPath, err := alternatesPath(repo)
if err != nil {
return err
@@ -41,3 +68,15 @@ func Unlink(ctx context.Context, repo repository.GitRepo) error {
return os.RemoveAll(altPath)
}
+
+// Config options setting will leak the key value pairs in the logs. This makes
+// this function not suitable for general usage, and scoped to this package.
+// To be corrected in: https://gitlab.com/gitlab-org/gitaly/issues/1430
+func (o *ObjectPool) setConfig(ctx context.Context, key, value string) error {
+ cmd, err := git.Command(ctx, o, "config", key, value)
+ if err != nil {
+ return err
+ }
+
+ return cmd.Wait()
+}
diff --git a/internal/git/objectpool/link_test.go b/internal/git/objectpool/link_test.go
index 4402d4b73..a97bc897c 100644
--- a/internal/git/objectpool/link_test.go
+++ b/internal/git/objectpool/link_test.go
@@ -5,6 +5,7 @@ import (
"os"
"testing"
+ "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gitlab.com/gitlab-org/gitaly/internal/testhelper"
)
@@ -41,6 +42,10 @@ func TestLink(t *testing.T) {
require.NoError(t, err)
require.Equal(t, content, newContent)
+
+ // Test if the remote is set
+ remotes := testhelper.MustRunCommand(t, nil, "git", "-C", pool.FullPath(), "remote")
+ assert.Equal(t, testRepo.GetGlRepository()+"\n", string(remotes))
}
func TestUnlink(t *testing.T) {
@@ -55,7 +60,7 @@ func TestUnlink(t *testing.T) {
defer pool.Remove(ctx)
// Without a pool on disk, this doesn't return an error
- require.NoError(t, Unlink(ctx, testRepo))
+ require.NoError(t, pool.Unlink(ctx, testRepo))
altPath, err := alternatesPath(testRepo)
require.NoError(t, err)
@@ -65,7 +70,7 @@ func TestUnlink(t *testing.T) {
_, err = os.Stat(altPath)
require.False(t, os.IsNotExist(err))
- require.NoError(t, Unlink(ctx, testRepo))
+ require.NoError(t, pool.Unlink(ctx, testRepo))
_, err = os.Stat(altPath)
require.True(t, os.IsNotExist(err))
}
diff --git a/internal/git/objectpool/pool.go b/internal/git/objectpool/pool.go
index 7da743132..824eb94ae 100644
--- a/internal/git/objectpool/pool.go
+++ b/internal/git/objectpool/pool.go
@@ -85,7 +85,7 @@ func (o *ObjectPool) Create(ctx context.Context, repo *gitalypb.Repository) (err
return err
}
- return nil
+ return o.setConfig(ctx, "gc.auto", "0")
}
// Remove will remove the pool, and all its contents without preparing and/or
diff --git a/internal/git/objectpool/remote.go b/internal/git/objectpool/remote.go
index 589808c9c..bed46c55f 100644
--- a/internal/git/objectpool/remote.go
+++ b/internal/git/objectpool/remote.go
@@ -1,6 +1,7 @@
package objectpool
import (
+ "bufio"
"context"
"gitlab.com/gitlab-org/gitaly/internal/git"
@@ -14,3 +15,23 @@ func (o *ObjectPool) removeRemote(ctx context.Context, name string) error {
return cmd.Wait()
}
+
+// hasRemote will always return a boolean value, but should only be depended on
+// when the error value is nil
+func (o *ObjectPool) hasRemote(ctx context.Context, name string) (bool, error) {
+ cmd, err := git.Command(ctx, o, "remote")
+ if err != nil {
+ return false, err
+ }
+
+ found := false
+ scanner := bufio.NewScanner(cmd)
+ for scanner.Scan() {
+ if scanner.Text() == name {
+ found = true
+ break
+ }
+ }
+
+ return found, cmd.Wait()
+}
diff --git a/internal/git/objectpool/remote_test.go b/internal/git/objectpool/remote_test.go
index ef07e02fd..ce9ec85f6 100644
--- a/internal/git/objectpool/remote_test.go
+++ b/internal/git/objectpool/remote_test.go
@@ -25,3 +25,26 @@ func TestRemoveRemote(t *testing.T) {
out := testhelper.MustRunCommand(t, nil, "git", "-C", pool.FullPath(), "remote")
require.Len(t, out, 0)
}
+
+func TestHasRemote(t *testing.T) {
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
+ testRepo, _, cleanupFn := testhelper.NewTestRepo(t)
+ defer cleanupFn()
+
+ pool, err := NewObjectPool(testRepo.GetStorageName(), t.Name())
+ require.NoError(t, err)
+
+ // This creates a remote to the repository, "origin"
+ require.NoError(t, pool.clone(ctx, testRepo))
+ defer pool.Remove(ctx)
+
+ found, err := pool.hasRemote(ctx, "origin")
+ require.NoError(t, err)
+ require.True(t, found)
+
+ found, err = pool.hasRemote(ctx, "can-not-be-found")
+ require.NoError(t, err)
+ require.False(t, found)
+}
diff --git a/internal/service/blob/lfs_pointers_test.go b/internal/service/blob/lfs_pointers_test.go
index 3dedf32af..86025f816 100644
--- a/internal/service/blob/lfs_pointers_test.go
+++ b/internal/service/blob/lfs_pointers_test.go
@@ -386,8 +386,24 @@ func TestSuccessfulGetAllLFSPointersRequest(t *testing.T) {
Data: []byte("version https://git-lfs.github.com/spec/v1\noid sha256:bad71f905b60729f502ca339f7c9f001281a3d12c68a5da7f15de8009f4bd63d\nsize 18\n"),
Oid: "bab31d249f78fba464d1b75799aad496cc07fa3b",
},
+ {
+ Size: 132,
+ Data: []byte("version https://git-lfs.github.com/spec/v1\noid sha256:96f74c6fe7a2979eefb9ec74a5dfc6888fb25543cf99b77586b79afea1da6f97\nsize 1219696\n"),
+ Oid: "ff0ab3afd1616ff78d0331865d922df103b64cf0",
+ },
+ {
+ Size: 129,
+ Data: []byte("version https://git-lfs.github.com/spec/v1\noid sha256:8c1e8de917525f83104736f6c64d32f0e2a02f5bf2ee57843a54f222cba8c813\nsize 2797\n"),
+ Oid: "0360724a0d64498331888f1eaef2d24243809230",
+ },
+ {
+ Size: 129,
+ Data: []byte("version https://git-lfs.github.com/spec/v1\noid sha256:47997ea7ecff33be61e3ca1cc287ee72a2125161518f1a169f2893a5a82e9d95\nsize 7501\n"),
+ Oid: "125fcc9f6e33175cb278b9b2809154d2535fe19f",
+ },
}
- require.ElementsMatch(t, getAllPointers(t, c), expectedLFSPointers)
+
+ require.ElementsMatch(t, expectedLFSPointers, getAllPointers(t, c))
}
func getAllPointers(t *testing.T, c gitalypb.BlobService_GetAllLFSPointersClient) []*gitalypb.LFSPointer {
diff --git a/internal/service/objectpool/create_test.go b/internal/service/objectpool/create_test.go
index 41d069607..e8319284d 100644
--- a/internal/service/objectpool/create_test.go
+++ b/internal/service/objectpool/create_test.go
@@ -58,6 +58,10 @@ func TestCreate(t *testing.T) {
out = testhelper.MustRunCommand(t, nil, "git", "-C", pool.FullPath(), "cat-file", "-s", "55bc176024cfa3baaceb71db584c7e5df900ea65")
assert.Equal(t, "282\n", string(out))
+ // No automatic GC
+ gc := testhelper.MustRunCommand(t, nil, "git", "-C", pool.FullPath(), "config", "--get", "gc.auto")
+ assert.Equal(t, "0\n", string(gc))
+
// Making the same request twice, should result in an error
_, err = client.CreateObjectPool(ctx, poolReq)
require.Error(t, err)
diff --git a/internal/service/objectpool/link.go b/internal/service/objectpool/link.go
index ef3d0c15d..234a33a87 100644
--- a/internal/service/objectpool/link.go
+++ b/internal/service/objectpool/link.go
@@ -4,7 +4,6 @@ import (
"context"
"gitlab.com/gitlab-org/gitaly-proto/go/gitalypb"
- "gitlab.com/gitlab-org/gitaly/internal/git/objectpool"
"gitlab.com/gitlab-org/gitaly/internal/helper"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
@@ -32,7 +31,12 @@ func (s *server) UnlinkRepositoryFromObjectPool(ctx context.Context, req *gitaly
return nil, status.Error(codes.InvalidArgument, "no repository")
}
- if err := objectpool.Unlink(ctx, req.GetRepository()); err != nil {
+ pool, err := poolForRequest(req)
+ if err != nil {
+ return nil, err
+ }
+
+ if err := pool.Unlink(ctx, req.GetRepository()); err != nil {
return nil, err
}
diff --git a/internal/service/objectpool/link_test.go b/internal/service/objectpool/link_test.go
index 17a58e39c..bc8c55cc7 100644
--- a/internal/service/objectpool/link_test.go
+++ b/internal/service/objectpool/link_test.go
@@ -147,6 +147,7 @@ func TestUnlink(t *testing.T) {
desc: "Successful request",
req: &gitalypb.UnlinkRepositoryFromObjectPoolRequest{
Repository: testRepo,
+ ObjectPool: pool.ToProto(),
},
code: codes.OK,
},
@@ -161,6 +162,9 @@ func TestUnlink(t *testing.T) {
commit, err := log.GetCommit(ctx, testRepo, poolCommitID)
require.NoError(t, err)
require.Nil(t, commit)
+
+ remotes := testhelper.MustRunCommand(t, nil, "git", "-C", pool.FullPath(), "remote")
+ require.Len(t, remotes, 0)
}
})
}
@@ -185,7 +189,10 @@ func TestUnlinkIdempotent(t *testing.T) {
require.NoError(t, pool.Create(ctx, testRepo))
require.NoError(t, pool.Link(ctx, testRepo))
- request := &gitalypb.UnlinkRepositoryFromObjectPoolRequest{testRepo}
+ request := &gitalypb.UnlinkRepositoryFromObjectPoolRequest{
+ Repository: testRepo,
+ ObjectPool: pool.ToProto(),
+ }
_, err = client.UnlinkRepositoryFromObjectPool(ctx, request)
require.NoError(t, err)
diff --git a/internal/testhelper/testhelper.go b/internal/testhelper/testhelper.go
index 718b9682d..d7bfbff29 100644
--- a/internal/testhelper/testhelper.go
+++ b/internal/testhelper/testhelper.go
@@ -349,7 +349,7 @@ func createRepo(t *testing.T, storagePath string) (repo *gitalypb.Repository, re
require.NoError(t, err)
relativePath, err = filepath.Rel(storagePath, repoPath)
require.NoError(t, err)
- repo = &gitalypb.Repository{StorageName: "default", RelativePath: relativePath}
+ repo = &gitalypb.Repository{StorageName: "default", RelativePath: relativePath, GlRepository: "project-1"}
return repo, repoPath, relativePath
}
diff --git a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/objectpool.pb.go b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/objectpool.pb.go
index e48d315a6..0731d078c 100644
--- a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/objectpool.pb.go
+++ b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/objectpool.pb.go
@@ -133,6 +133,7 @@ func (*LinkRepositoryToObjectPoolResponse) Descriptor() ([]byte, []int) {
// from the pool participant. The caller is responsible no data loss occurs.
type UnlinkRepositoryFromObjectPoolRequest struct {
Repository *Repository `protobuf:"bytes,1,opt,name=repository" json:"repository,omitempty"`
+ ObjectPool *ObjectPool `protobuf:"bytes,2,opt,name=object_pool,json=objectPool" json:"object_pool,omitempty"`
}
func (m *UnlinkRepositoryFromObjectPoolRequest) Reset() { *m = UnlinkRepositoryFromObjectPoolRequest{} }
@@ -149,6 +150,13 @@ func (m *UnlinkRepositoryFromObjectPoolRequest) GetRepository() *Repository {
return nil
}
+func (m *UnlinkRepositoryFromObjectPoolRequest) GetObjectPool() *ObjectPool {
+ if m != nil {
+ return m.ObjectPool
+ }
+ return nil
+}
+
type UnlinkRepositoryFromObjectPoolResponse struct {
}
@@ -349,26 +357,27 @@ var _ObjectPoolService_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("objectpool.proto", fileDescriptor7) }
var fileDescriptor7 = []byte{
- // 331 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0xc1, 0x4e, 0xc2, 0x40,
- 0x18, 0x84, 0x29, 0x26, 0x1c, 0x7e, 0x3c, 0xe0, 0x5e, 0x20, 0x7b, 0x50, 0x6c, 0xd4, 0x20, 0x89,
- 0x3d, 0x94, 0x17, 0x30, 0xd1, 0x78, 0x32, 0x6a, 0xaa, 0xc6, 0x83, 0x07, 0x53, 0xf0, 0x0f, 0xae,
- 0xd6, 0xfe, 0x75, 0xbb, 0x98, 0xe0, 0xcd, 0xbb, 0x0f, 0xe5, 0xa3, 0x99, 0xd2, 0x96, 0x85, 0x36,
- 0x0b, 0x8d, 0xe1, 0xba, 0x9d, 0xce, 0x7c, 0xdd, 0x99, 0x14, 0x5a, 0x34, 0x7c, 0xc5, 0x91, 0x8a,
- 0x88, 0x02, 0x27, 0x92, 0xa4, 0x88, 0x35, 0xc6, 0x42, 0xf9, 0xc1, 0x94, 0x6f, 0xc7, 0x2f, 0xbe,
- 0xc4, 0xe7, 0xf4, 0xd4, 0x3e, 0x05, 0xb8, 0x9e, 0x29, 0x6f, 0x88, 0x02, 0xe6, 0x02, 0x48, 0x8c,
+ // 338 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0x41, 0x4f, 0xc2, 0x40,
+ 0x10, 0x85, 0x29, 0x26, 0x1c, 0x06, 0x0f, 0xb8, 0x17, 0xc8, 0x1e, 0x14, 0x1b, 0x35, 0x48, 0x62,
+ 0x0f, 0xe5, 0x0f, 0x98, 0x68, 0x3c, 0x19, 0x35, 0x55, 0xe3, 0xd1, 0x14, 0x9c, 0xe0, 0x6a, 0xed,
+ 0xd4, 0xed, 0x62, 0x82, 0x37, 0xef, 0x1e, 0xfc, 0x49, 0xfe, 0x34, 0x53, 0xda, 0xb2, 0xd0, 0x66,
+ 0xa1, 0x31, 0x5c, 0xa7, 0xaf, 0xef, 0x7d, 0x9d, 0x79, 0x29, 0xb4, 0x68, 0xf8, 0x82, 0x23, 0x15,
+ 0x11, 0x05, 0x4e, 0x24, 0x49, 0x11, 0x6b, 0x8c, 0x85, 0xf2, 0x83, 0x29, 0xdf, 0x8e, 0x9f, 0x7d,
+ 0x89, 0x4f, 0xe9, 0xd4, 0x3e, 0x05, 0xb8, 0x9e, 0x29, 0x6f, 0x88, 0x02, 0xe6, 0x02, 0x48, 0x8c,
0x28, 0x16, 0x8a, 0xe4, 0xb4, 0x63, 0x75, 0xad, 0x5e, 0xd3, 0x65, 0x4e, 0xfa, 0xa2, 0xe3, 0xcd,
- 0x9f, 0x78, 0x0b, 0x2a, 0xfb, 0x0b, 0xda, 0x67, 0x12, 0x7d, 0x85, 0xda, 0xc7, 0xc3, 0x8f, 0x09,
- 0xc6, 0x8a, 0x0d, 0xa0, 0x99, 0x62, 0x3c, 0x25, 0x1c, 0x45, 0xbf, 0x05, 0x3d, 0x90, 0x66, 0xe8,
+ 0x9f, 0x78, 0x0b, 0x2a, 0xfb, 0x13, 0xda, 0x67, 0x12, 0x7d, 0x85, 0xda, 0xc7, 0xc3, 0xf7, 0x09,
+ 0xc6, 0x8a, 0x0d, 0xa0, 0x99, 0x62, 0x3c, 0x26, 0x1c, 0x45, 0xbf, 0x05, 0x3d, 0x90, 0x66, 0xe8,
0x43, 0x83, 0xa4, 0x18, 0x8b, 0xb0, 0x53, 0x37, 0xe6, 0x67, 0x0a, 0x9b, 0x43, 0xa7, 0x9c, 0x1d,
0x47, 0x14, 0xc6, 0x68, 0x5f, 0x41, 0xfb, 0x1c, 0x03, 0xdc, 0x14, 0x57, 0x92, 0x55, 0xf6, 0xcb,
- 0xb2, 0x7e, 0x2c, 0xd8, 0xbf, 0x14, 0xe1, 0x9b, 0x46, 0xbc, 0xa3, 0x0d, 0x5d, 0xc7, 0x72, 0x25,
- 0xf5, 0x4a, 0x95, 0x1c, 0x80, 0xbd, 0x8a, 0x26, 0x83, 0x7e, 0x84, 0xc3, 0xfb, 0x30, 0x58, 0xd2,
- 0x5d, 0x48, 0x7a, 0x2f, 0x73, 0xff, 0x67, 0x15, 0x3d, 0x38, 0x5a, 0x67, 0x9e, 0x62, 0xb8, 0xbf,
- 0x5b, 0xb0, 0xa3, 0x8f, 0x6f, 0x51, 0x7e, 0x8a, 0x11, 0xb2, 0x07, 0x68, 0x15, 0x9b, 0x65, 0x7b,
- 0x79, 0xa6, 0x61, 0x6f, 0xbc, 0x6b, 0x16, 0x64, 0xdf, 0x5c, 0x4b, 0x8c, 0x8b, 0x35, 0x6a, 0x63,
- 0xc3, 0x60, 0xb4, 0xb1, 0x71, 0x01, 0x35, 0x36, 0x01, 0x6e, 0xbe, 0x74, 0x76, 0x9c, 0x3b, 0xac,
- 0x9d, 0x09, 0xef, 0x57, 0x91, 0xce, 0x63, 0xbf, 0x2d, 0xd8, 0x5d, 0x7d, 0xd3, 0xec, 0x24, 0x37,
- 0xac, 0x54, 0x37, 0x77, 0xaa, 0xca, 0x73, 0x86, 0x61, 0x63, 0xf6, 0x2f, 0x19, 0xfc, 0x05, 0x00,
- 0x00, 0xff, 0xff, 0x17, 0xc1, 0x10, 0xd9, 0x75, 0x04, 0x00, 0x00,
+ 0xb2, 0xbe, 0x2d, 0xd8, 0xbf, 0x14, 0xe1, 0xab, 0x46, 0xbc, 0xa3, 0x0d, 0xad, 0x63, 0xf9, 0x24,
+ 0xf5, 0x4a, 0x27, 0x39, 0x00, 0x7b, 0x15, 0x4d, 0x06, 0xfd, 0x63, 0xc1, 0xe1, 0x7d, 0x18, 0x2c,
+ 0x09, 0x2f, 0x24, 0xbd, 0x95, 0xc1, 0xff, 0x51, 0x8b, 0xe2, 0xc7, 0xd6, 0x2b, 0xed, 0xb8, 0x07,
+ 0x47, 0xeb, 0x88, 0x52, 0x78, 0xf7, 0x77, 0x0b, 0x76, 0xf4, 0xf8, 0x16, 0xe5, 0x87, 0x18, 0x21,
+ 0x7b, 0x80, 0x56, 0xb1, 0x0f, 0x6c, 0x2f, 0xcf, 0x34, 0xb4, 0x94, 0x77, 0xcd, 0x82, 0x6c, 0x53,
+ 0xb5, 0xc4, 0xb8, 0x78, 0x7c, 0x6d, 0x6c, 0xa8, 0x99, 0x36, 0x36, 0xf6, 0xa6, 0xc6, 0x26, 0xc0,
+ 0xcd, 0xa7, 0x62, 0xc7, 0xb9, 0xc3, 0xda, 0x72, 0xf1, 0x7e, 0x15, 0xe9, 0x3c, 0xf6, 0xcb, 0x82,
+ 0xdd, 0xd5, 0x9b, 0x66, 0x27, 0xb9, 0x61, 0xa5, 0x8e, 0x70, 0xa7, 0xaa, 0x3c, 0x67, 0x18, 0x36,
+ 0x66, 0x7f, 0xa0, 0xc1, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4c, 0x09, 0x9c, 0xf6, 0xab, 0x04,
+ 0x00, 0x00,
}
diff --git a/vendor/vendor.json b/vendor/vendor.json
index f125aef60..47bad3ba1 100644
--- a/vendor/vendor.json
+++ b/vendor/vendor.json
@@ -315,12 +315,12 @@
"versionExact": "v1.2.2"
},
{
- "checksumSHA1": "K8ub2fUgYq2Sb3FbKPzGhv96UNo=",
+ "checksumSHA1": "5t/1h2cvv7Nbho0apE2ghr2K7L0=",
"path": "gitlab.com/gitlab-org/gitaly-proto/go/gitalypb",
- "revision": "ca09ca1e2da6dc957644fa95990e8a3d032d6252",
- "revisionTime": "2018-11-28T10:00:28Z",
- "version": "v1.3.0",
- "versionExact": "v1.3.0"
+ "revision": "8eb6120caacdbe12b0abd0c9125e2e319a7689dc",
+ "revisionTime": "2018-12-10T09:05:58Z",
+ "version": "v1.4.0",
+ "versionExact": "v1.4.0"
},
{
"checksumSHA1": "S9x46Eq79I1EkoXI8woeIU6w/wY=",