diff options
author | Michael Leopard <mleopard@gitlab.com> | 2018-12-17 15:34:04 +0300 |
---|---|---|
committer | Michael Leopard <mleopard@gitlab.com> | 2018-12-17 15:34:04 +0300 |
commit | f0c846d49c909b8052a8d1334a154a16fb27d187 (patch) | |
tree | 05d71e72916715cdaaabd1beda43af3460509213 | |
parent | b840993d267945b4441a79ce888575d4d4bac614 (diff) | |
parent | f6cd55357ba39f720f6adbdd36d8a7b46f29b545 (diff) |
Merge branch 'master' into 1293-re-implement-findbranch-in-go
-rw-r--r-- | CHANGELOG.md | 10 | ||||
-rw-r--r-- | VERSION | 2 | ||||
-rw-r--r-- | _support/gitlab-git-test.git-packed-refs | 20 | ||||
-rw-r--r-- | _support/gitlab-test.git-packed-refs | 94 | ||||
-rw-r--r-- | _support/makegen.go | 8 | ||||
-rw-r--r-- | doc/test_repos.md | 18 | ||||
-rw-r--r-- | internal/git/objectpool/link.go | 45 | ||||
-rw-r--r-- | internal/git/objectpool/link_test.go | 9 | ||||
-rw-r--r-- | internal/git/objectpool/pool.go | 2 | ||||
-rw-r--r-- | internal/git/objectpool/remote.go | 21 | ||||
-rw-r--r-- | internal/git/objectpool/remote_test.go | 23 | ||||
-rw-r--r-- | internal/service/blob/lfs_pointers_test.go | 18 | ||||
-rw-r--r-- | internal/service/objectpool/create_test.go | 4 | ||||
-rw-r--r-- | internal/service/objectpool/link.go | 8 | ||||
-rw-r--r-- | internal/service/objectpool/link_test.go | 9 | ||||
-rw-r--r-- | internal/testhelper/testhelper.go | 2 | ||||
-rw-r--r-- | vendor/gitlab.com/gitlab-org/gitaly-proto/go/gitalypb/objectpool.pb.go | 47 | ||||
-rw-r--r-- | vendor/vendor.json | 10 |
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 @@ -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=", |