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:
authorStan Hu <stanhu@gmail.com>2018-04-05 22:08:49 +0300
committerStan Hu <stanhu@gmail.com>2018-04-05 22:08:49 +0300
commit2e62a4544a79c177fd16b791d3683cdfa68f75a3 (patch)
tree14a3003eec43736f65bf8346eb9d94fafb690e00
parentb8802e3dd039c30e80c7e2921b04802c31a477f8 (diff)
parente48707d1354f24fe67fec5a88f1d93541ac9cae3 (diff)
Merge branch 'master' into sh-add-cleanup
-rw-r--r--.gitlab/issue_templates/Migration_Acceptance_Testing.md32
-rw-r--r--CHANGELOG.md7
-rw-r--r--VERSION2
-rw-r--r--internal/helper/housekeeping/housekeeping.go40
-rw-r--r--internal/helper/housekeeping/housekeeping_test.go10
-rw-r--r--internal/service/commit/commit_messages.go46
-rw-r--r--internal/service/commit/commit_messages_test.go120
-rw-r--r--internal/service/ref/tag_messages.go46
-rw-r--r--internal/service/ref/tag_messages_test.go120
-rw-r--r--internal/service/repository/calculate_checksum.go4
-rw-r--r--internal/tempdir/tempdir.go47
-rw-r--r--internal/tempdir/tempdir_test.go23
-rw-r--r--ruby/Gemfile2
-rw-r--r--ruby/Gemfile.lock8
-rw-r--r--ruby/lib/gitaly_server/commit_service.rb24
-rw-r--r--ruby/lib/gitaly_server/ref_service.rb24
-rw-r--r--vendor/gitlab.com/gitlab-org/gitaly-proto/go/VERSION2
-rw-r--r--vendor/gitlab.com/gitlab-org/gitaly-proto/go/ref.pb.go190
-rw-r--r--vendor/vendor.json10
19 files changed, 568 insertions, 189 deletions
diff --git a/.gitlab/issue_templates/Migration_Acceptance_Testing.md b/.gitlab/issue_templates/Migration_Acceptance_Testing.md
index 2ed9f255a..9b3c6c953 100644
--- a/.gitlab/issue_templates/Migration_Acceptance_Testing.md
+++ b/.gitlab/issue_templates/Migration_Acceptance_Testing.md
@@ -33,8 +33,8 @@ Then leave running while monitoring and performing some testing through web, api
- [ ] **Monitor Grafana** feature dashboard on dev: [Gitaly Feature Status Dashboard](https://performance.gitlab.net/dashboard/db/gitaly-feature-status?from=now-12h&to=now&orgId=1&var-method=GRPC_METHOD_NAME&var-job=gitaly-dev&refresh=5m)
- [ ] **Inspect logs** in ELK:
- - [GRPC_METHOD_NAME invocations, last hour](https://log.gitlap.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20hostname:dev'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-1h,mode:quick,to:now%29%29) for unusual activity
- - [GRPC_METHOD_NAME errors, last hour](https://log.gitlap.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20hostname:dev%20AND%20NOT%20grpc.code:OK%20AND%20message:finished'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-1h,mode:quick,to:now%29%29) for unusual activity
+ - [GRPC_METHOD_NAME invocations, last hour](https://kibana.gprd.gitlab.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20hostname:dev'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-1h,mode:quick,to:now%29%29) for unusual activity
+ - [GRPC_METHOD_NAME errors, last hour](https://kibana.gprd.gitlab.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20hostname:dev%20AND%20NOT%20grpc.code:OK%20AND%20message:finished'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-1h,mode:quick,to:now%29%29) for unusual activity
- [ ] **Check for errors** in [Gitaly Dev Sentry](https://sentry.gitlap.com/gitlab/devgitlaborg-gitaly/?query=is%3Aunresolved+grpc.method%3A%2Fgitaly.GRPC_SERVICE_NAME%2FGRPC_METHOD_NAME)
- [ ] **Check for errors** in [GitLab Dev Sentry](https://sentry.gitlap.com/gitlab/devgitlaborg/?query=is%3Aunresolved+gitaly)
@@ -57,8 +57,8 @@ Then leave running while monitoring for at least **15 minutes** while performing
- [ ] **Monitor Grafana** feature dashboard on staging: [Gitaly Feature Status Dashboard](https://performance.gitlab.net/dashboard/db/gitaly-feature-status?from=now-12h&to=now&orgId=1&var-method=GRPC_METHOD_NAME&var-job=gitaly-nfs-staging&refresh=5m)
- [ ] **Inspect logs** in ELK:
- - [GRPC_METHOD_NAME invocations, last hour](https://log.gitlap.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20hostname:nfs5'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-1h,mode:quick,to:now%29%29) for unusual activity
- - [GRPC_METHOD_NAME errors, last hour](https://log.gitlap.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20hostname:nfs5%20AND%20NOT%20grpc.code:OK%20AND%20message:finished'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-1h,mode:quick,to:now%29%29) for unusual activity
+ - [GRPC_METHOD_NAME invocations, last hour](https://kibana.gprd.gitlab.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20hostname:nfs5'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-1h,mode:quick,to:now%29%29) for unusual activity
+ - [GRPC_METHOD_NAME errors, last hour](https://kibana.gprd.gitlab.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20hostname:nfs5%20AND%20NOT%20grpc.code:OK%20AND%20message:finished'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-1h,mode:quick,to:now%29%29) for unusual activity
- [ ] **Check for errors** in [Gitaly Staging Sentry](https://sentry.gitlap.com/gitlab/staginggitlabcom-gitaly/?query=is%3Aunresolved+grpc.method%3A%2Fgitaly.GRPC_SERVICE_NAME%2FGRPC_METHOD_NAME)
- [ ] **Check for errors** in [GitLab Staging Sentry](https://sentry.gitlap.com/gitlab/staginggitlabcom/?query=is%3Aunresolved+gitaly)
@@ -74,15 +74,15 @@ Then leave running while monitoring for at least **15 minutes** while performing
## 5. Initial Impact Check
- [ ] Create an issue in the infrastructure tracker: [Create issue now](https://gitlab.com/gitlab-com/infrastructure/issues/new?issue[title]=Testing%20of%20Gitaly%20Feature%20GITALY_FEATURE_NAME&issue[description]=https%3A%2F%2Fgitlab.com%2Fgitlab-org%2Fgitaly%2Fissues%2FACCEPTANCE_TEST_ISSUE_NUMBER%0A%0A%2Flabel%20~gitaly%20~change)
-- [ ] Set Gitaly to 1% using the command `!feature-set GITALY_FEATURE_NAME 1` in [`#production`](https://gitlab.slack.com/messages/C101F3796/)
+- [ ] Set Gitaly to 1% using the command `/chatops run feature set GITALY_FEATURE_NAME 1` in [`#production`](https://gitlab.slack.com/messages/C101F3796/)
Then leave running while monitoring for at least **15 minutes** while performing some testing through web, api or SSH.
#### Monitor (at least every 5 minutes, preferably real-time)
- [ ] **Monitor Grafana** feature dashboard on production: [Gitaly Feature Status Dashboard](https://performance.gitlab.net/dashboard/db/gitaly-feature-status?from=now-12h&to=now&orgId=1&var-method=GRPC_METHOD_NAME&var-job=gitaly-production&refresh=5m)
- [ ] **Inspect logs** in ELK:
- - [GRPC_METHOD_NAME invocations, last hour](https://log.gitlap.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-1h,mode:quick,to:now%29%29) for unusual activity
- - [GRPC_METHOD_NAME errors, last hour](https://log.gitlap.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev%20AND%20NOT%20grpc.code:OK%20AND%20message:finished'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-1h,mode:quick,to:now%29%29) for unusual activity
+ - [GRPC_METHOD_NAME invocations, last hour](https://kibana.gprd.gitlab.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-1h,mode:quick,to:now%29%29) for unusual activity
+ - [GRPC_METHOD_NAME errors, last hour](https://kibana.gprd.gitlab.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev%20AND%20NOT%20grpc.code:OK%20AND%20message:finished'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-1h,mode:quick,to:now%29%29) for unusual activity
- [ ] **Check for errors** in [Gitaly Sentry](https://sentry.gitlap.com/gitlab/gitaly-production/?query=is%3Aunresolved+grpc.method%3A%2Fgitaly.GRPC_SERVICE_NAME%2FGRPC_METHOD_NAME)
- [ ] **Check for errors** in [GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved+gitaly)
@@ -92,15 +92,15 @@ Then leave running while monitoring for at least **15 minutes** while performing
## 6. Low Impact Trial
-- [ ] Set Gitaly to 5% using the command `!feature-set GITALY_FEATURE_NAME 5` in [`#production`](https://gitlab.slack.com/messages/C101F3796/)
+- [ ] Set Gitaly to 5% using the command `/chatops run feature set GITALY_FEATURE_NAME 5` in [`#production`](https://gitlab.slack.com/messages/C101F3796/)
Then leave running while monitoring for at least **2 hours**.
#### Monitor (at least every 20 minutes)
- [ ] **Monitor Grafana** feature dashboard on production: [Gitaly Feature Status Dashboard](https://performance.gitlab.net/dashboard/db/gitaly-feature-status?from=now-12h&to=now&orgId=1&var-method=GRPC_METHOD_NAME&var-job=gitaly-production&refresh=5m)
- [ ] **Inspect logs** in ELK:
- - [GRPC_METHOD_NAME invocations, last 2 hours](https://log.gitlap.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-2h,mode:quick,to:now%29%29) for unusual activity
- - [GRPC_METHOD_NAME errors, last 2 hours](https://log.gitlap.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev%20AND%20NOT%20grpc.code:OK%20AND%20message:finished'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-2h,mode:quick,to:now%29%29) for unusual activity
+ - [GRPC_METHOD_NAME invocations, last 2 hours](https://kibana.gprd.gitlab.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-2h,mode:quick,to:now%29%29) for unusual activity
+ - [GRPC_METHOD_NAME errors, last 2 hours](https://kibana.gprd.gitlab.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev%20AND%20NOT%20grpc.code:OK%20AND%20message:finished'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-2h,mode:quick,to:now%29%29) for unusual activity
- [ ] **Check for errors** in [Gitaly Sentry](https://sentry.gitlap.com/gitlab/gitaly-production/?query=is%3Aunresolved+grpc.method%3A%2Fgitaly.GRPC_SERVICE_NAME%2FGRPC_METHOD_NAME)
- [ ] **Check for errors** in [GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved+gitaly)
@@ -110,15 +110,15 @@ Then leave running while monitoring for at least **2 hours**.
## 7. Mid Impact Trial
-- [ ] Set Gitaly to 50% using the command `!feature-set GITALY_FEATURE_NAME 50` in [`#production`](https://gitlab.slack.com/messages/C101F3796/)
+- [ ] Set Gitaly to 50% using the command `/chatops run feature set GITALY_FEATURE_NAME 50` in [`#production`](https://gitlab.slack.com/messages/C101F3796/)
Then leave running while monitoring for at least **24 hours**.
#### Monitor (at least every few hours)
- [ ] **Monitor Grafana** feature dashboard on production: [Gitaly Feature Status Dashboard](https://performance.gitlab.net/dashboard/db/gitaly-feature-status?from=now-12h&to=now&orgId=1&var-method=GRPC_METHOD_NAME&var-job=gitaly-production&refresh=5m)
- [ ] **Inspect logs** in ELK:
- - [GRPC_METHOD_NAME invocations, last 24 hours](https://log.gitlap.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-24h,mode:quick,to:now%29%29) for unusual activity
- - [GRPC_METHOD_NAME errors, last 24 hours](https://log.gitlap.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev%20AND%20NOT%20grpc.code:OK%20AND%20message:finished'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-24h,mode:quick,to:now%29%29) for unusual activity
+ - [GRPC_METHOD_NAME invocations, last 24 hours](https://kibana.gprd.gitlab.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-24h,mode:quick,to:now%29%29) for unusual activity
+ - [GRPC_METHOD_NAME errors, last 24 hours](https://kibana.gprd.gitlab.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev%20AND%20NOT%20grpc.code:OK%20AND%20message:finished'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-24h,mode:quick,to:now%29%29) for unusual activity
- [ ] **Check for errors** in [Gitaly Sentry](https://sentry.gitlap.com/gitlab/gitaly-production/?query=is%3Aunresolved+grpc.method%3A%2Fgitaly.GRPC_SERVICE_NAME%2FGRPC_METHOD_NAME)
- [ ] **Check for errors** in [GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved+gitaly)
@@ -128,15 +128,15 @@ Then leave running while monitoring for at least **24 hours**.
## 8. Full Impact Trial
-- [ ] Set Gitaly to 100% using the command `!feature-set GITALY_FEATURE_NAME 100` in [`#production`](https://gitlab.slack.com/messages/C101F3796/)
+- [ ] Set Gitaly to 100% using the command `/chatops run feature set GITALY_FEATURE_NAME 100` in [`#production`](https://gitlab.slack.com/messages/C101F3796/)
Then leave running while monitoring for at least **1 week**.
#### Monitor (at least every day)
- [ ] **Monitor Grafana** feature dashboard on production: [Gitaly Feature Status Dashboard](https://performance.gitlab.net/dashboard/db/gitaly-feature-status?from=now-12h&to=now&orgId=1&var-method=GRPC_METHOD_NAME&var-job=gitaly-production&refresh=5m)
- [ ] **Inspect logs** in ELK:
- - [GRPC_METHOD_NAME invocations, last 7 days](https://log.gitlap.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-7d,mode:quick,to:now%29%29) for unusual activity
- - [GRPC_METHOD_NAME errors, last 7 days](https://log.gitlap.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev%20AND%20NOT%20grpc.code:OK%20AND%20message:finished'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-7d,mode:quick,to:now%29%29) for unusual activity
+ - [GRPC_METHOD_NAME invocations, last 7 days](https://kibana.gprd.gitlab.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-7d,mode:quick,to:now%29%29) for unusual activity
+ - [GRPC_METHOD_NAME errors, last 7 days](https://kibana.gprd.gitlab.com/app/kibana#/discover?_a=%28index%3A'gitaly-*'%2Cquery%3A%28query_string%3A%28query%3A'grpc.method:GRPC_METHOD_NAME%20AND%20NOT%20hostname:dev%20AND%20NOT%20grpc.code:OK%20AND%20message:finished'%29%29%29&_g=%28refreshInterval:%28display:Off,pause:!f,value:0%29,time:%28from:now-7d,mode:quick,to:now%29%29) for unusual activity
- [ ] **Check for errors** in [Gitaly Sentry](https://sentry.gitlap.com/gitlab/gitaly-production/?query=is%3Aunresolved+grpc.method%3A%2Fgitaly.GRPC_SERVICE_NAME%2FGRPC_METHOD_NAME)
- [ ] **Check for errors** in [GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved+gitaly)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d856b94a6..a1b2bbcf3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,13 @@
UNRELEASED
+- Implement Get{Tag,Commit}Messages RPCs
+ https://gitlab.com/gitlab-org/gitaly/merge_requests/646
+- Fix directory permission walker for Go 1.10
+ https://gitlab.com/gitlab-org/gitaly/merge_requests/650
+
+v0.93.0
+
- Fix concurrency limit handler stream interceptor
https://gitlab.com/gitlab-org/gitaly/merge_requests/640
- Vendor gitlab_git at 9b76d8512a5491202e5a953
diff --git a/VERSION b/VERSION
index 36545ad33..9188543ea 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.92.0
+0.93.0
diff --git a/internal/helper/housekeeping/housekeeping.go b/internal/helper/housekeeping/housekeeping.go
index 3dbd119da..e4e3b841f 100644
--- a/internal/helper/housekeeping/housekeeping.go
+++ b/internal/helper/housekeeping/housekeeping.go
@@ -20,20 +20,19 @@ func Perform(ctx context.Context, repoPath string) error {
filesMarkedForRemoval := 0
unremovableFiles := 0
- err := filepath.Walk(repoPath, func(path string, info os.FileInfo, err error) error {
+ err := filepath.Walk(repoPath, func(path string, info os.FileInfo, _ error) error {
if repoPath == path {
// Never consider the root path
return nil
}
- if info == nil || !shouldRemove(path, info.ModTime(), info.Mode(), err) {
+ if info == nil || !shouldRemove(path, info.ModTime(), info.Mode()) {
return nil
}
filesMarkedForRemoval++
- err = forceRemove(path)
- if err != nil {
+ if err := forceRemove(path); err != nil {
unremovableFiles++
logger.WithError(err).WithField("path", path).Warn("unable to remove stray file")
}
@@ -56,10 +55,29 @@ func Perform(ctx context.Context, repoPath string) error {
return err
}
-func fixPermissions(path string) {
- filepath.Walk(path, func(path string, info os.FileInfo, err error) error {
- if info.IsDir() {
- os.Chmod(path, 0700)
+// FixDirectoryPermissions does a recursive directory walk to look for
+// directories that cannot be accessed by the current user, and tries to
+// fix those with chmod. The motivating problem is that directories with mode
+// 0 break os.RemoveAll.
+func FixDirectoryPermissions(path string) error {
+ return fixDirectoryPermissions(path, make(map[string]struct{}))
+}
+
+const minimumDirPerm = 0700
+
+func fixDirectoryPermissions(path string, retriedPaths map[string]struct{}) error {
+ return filepath.Walk(path, func(path string, info os.FileInfo, errIncoming error) error {
+ if !info.IsDir() || info.Mode()&minimumDirPerm == minimumDirPerm {
+ return nil
+ }
+
+ if err := os.Chmod(path, info.Mode()|minimumDirPerm); err != nil {
+ return err
+ }
+
+ if _, retried := retriedPaths[path]; !retried && os.IsPermission(errIncoming) {
+ retriedPaths[path] = struct{}{}
+ return fixDirectoryPermissions(path, retriedPaths)
}
return nil
@@ -74,12 +92,14 @@ func forceRemove(path string) error {
}
// Delete failed. Try again after chmod'ing directories recursively
- fixPermissions(path)
+ if err := FixDirectoryPermissions(path); err != nil {
+ return err
+ }
return os.RemoveAll(path)
}
-func shouldRemove(path string, modTime time.Time, mode os.FileMode, err error) bool {
+func shouldRemove(path string, modTime time.Time, mode os.FileMode) bool {
base := filepath.Base(path)
// Only delete entries starting with `tmp_` and older than a week
diff --git a/internal/helper/housekeeping/housekeeping_test.go b/internal/helper/housekeeping/housekeeping_test.go
index e8dd38c86..8f6defa73 100644
--- a/internal/helper/housekeeping/housekeeping_test.go
+++ b/internal/helper/housekeeping/housekeeping_test.go
@@ -1,7 +1,6 @@
package housekeeping
import (
- "fmt"
"io/ioutil"
"os"
"path/filepath"
@@ -201,7 +200,6 @@ func TestShouldUnlink(t *testing.T) {
path string
modTime time.Time
mode os.FileMode
- err error
}
tests := []struct {
name string
@@ -214,7 +212,6 @@ func TestShouldUnlink(t *testing.T) {
path: "/tmp/objects",
modTime: time.Now().Add(-1 * time.Hour),
mode: 0700,
- err: nil,
},
want: false,
},
@@ -224,7 +221,6 @@ func TestShouldUnlink(t *testing.T) {
path: "/tmp/",
modTime: time.Now().Add(-1 * time.Hour),
mode: 0770,
- err: nil,
},
want: false,
},
@@ -234,7 +230,6 @@ func TestShouldUnlink(t *testing.T) {
path: "/tmp/tmp_DELETEME",
modTime: time.Now().Add(-1 * time.Hour),
mode: 0600,
- err: nil,
},
want: false,
},
@@ -244,7 +239,6 @@ func TestShouldUnlink(t *testing.T) {
path: "/tmp/tmp_DELETEME",
modTime: time.Now().Add(-8 * 24 * time.Hour),
mode: 0600,
- err: nil,
},
want: true,
},
@@ -254,7 +248,6 @@ func TestShouldUnlink(t *testing.T) {
path: "/tmp/tmp_DELETEME",
modTime: time.Now().Add(-1 * time.Hour),
mode: 0000,
- err: nil,
},
want: false,
},
@@ -264,7 +257,6 @@ func TestShouldUnlink(t *testing.T) {
path: "/tmp/tmp_DELETEME",
modTime: time.Now().Add(-1 * time.Hour),
mode: 0000,
- err: fmt.Errorf("file inaccessible"),
},
want: false,
},
@@ -272,7 +264,7 @@ func TestShouldUnlink(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- if got := shouldRemove(tt.args.path, tt.args.modTime, tt.args.mode, tt.args.err); got != tt.want {
+ if got := shouldRemove(tt.args.path, tt.args.modTime, tt.args.mode); got != tt.want {
t.Errorf("shouldUnlink() = %v, want %v", got, tt.want)
}
})
diff --git a/internal/service/commit/commit_messages.go b/internal/service/commit/commit_messages.go
index edb5a2e4b..63dc6fe19 100644
--- a/internal/service/commit/commit_messages.go
+++ b/internal/service/commit/commit_messages.go
@@ -1,11 +1,53 @@
package commit
import (
- "gitlab.com/gitlab-org/gitaly/internal/helper"
+ "fmt"
+
+ "gitlab.com/gitlab-org/gitaly/internal/rubyserver"
pb "gitlab.com/gitlab-org/gitaly-proto/go"
+
+ "google.golang.org/grpc/codes"
+ "google.golang.org/grpc/status"
)
func (s *server) GetCommitMessages(request *pb.GetCommitMessagesRequest, stream pb.CommitService_GetCommitMessagesServer) error {
- return helper.Unimplemented
+ if err := validateGetCommitMessagesRequest(request); err != nil {
+ return status.Errorf(codes.InvalidArgument, "GetCommitMessages: %v", err)
+ }
+
+ ctx := stream.Context()
+
+ client, err := s.CommitServiceClient(ctx)
+ if err != nil {
+ return err
+ }
+
+ clientCtx, err := rubyserver.SetHeaders(ctx, request.GetRepository())
+ if err != nil {
+ return err
+ }
+
+ rubyStream, err := client.GetCommitMessages(clientCtx, request)
+ if err != nil {
+ return err
+ }
+
+ return rubyserver.Proxy(func() error {
+ resp, err := rubyStream.Recv()
+ if err != nil {
+ md := rubyStream.Trailer()
+ stream.SetTrailer(md)
+ return err
+ }
+ return stream.Send(resp)
+ })
+}
+
+func validateGetCommitMessagesRequest(request *pb.GetCommitMessagesRequest) error {
+ if request.GetRepository() == nil {
+ return fmt.Errorf("empty Repository")
+ }
+
+ return nil
}
diff --git a/internal/service/commit/commit_messages_test.go b/internal/service/commit/commit_messages_test.go
new file mode 100644
index 000000000..33a221e58
--- /dev/null
+++ b/internal/service/commit/commit_messages_test.go
@@ -0,0 +1,120 @@
+package commit
+
+import (
+ "io"
+ "strings"
+ "testing"
+
+ "gitlab.com/gitlab-org/gitaly/internal/helper"
+ "gitlab.com/gitlab-org/gitaly/internal/testhelper"
+
+ pb "gitlab.com/gitlab-org/gitaly-proto/go"
+
+ "github.com/stretchr/testify/require"
+ "google.golang.org/grpc/codes"
+)
+
+func TestSuccessfulGetCommitMessagesRequest(t *testing.T) {
+ server, serverSocketPath := startTestServices(t)
+ defer server.Stop()
+
+ client, conn := newCommitServiceClient(t, serverSocketPath)
+ defer conn.Close()
+
+ testRepo, testRepoPath, cleanupFn := testhelper.NewTestRepo(t)
+ defer cleanupFn()
+
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
+ message1 := strings.Repeat("a\n", helper.MaxCommitOrTagMessageSize*2)
+ message2 := strings.Repeat("b\n", helper.MaxCommitOrTagMessageSize*2)
+
+ commit1ID := testhelper.CreateCommit(t, testRepoPath, "local-big-commits", &testhelper.CreateCommitOpts{Message: message1})
+ commit2ID := testhelper.CreateCommit(t, testRepoPath, "local-big-commits", &testhelper.CreateCommitOpts{Message: message2, ParentID: commit1ID})
+
+ request := &pb.GetCommitMessagesRequest{
+ Repository: testRepo,
+ CommitIds: []string{commit1ID, commit2ID},
+ }
+
+ c, err := client.GetCommitMessages(ctx, request)
+ require.NoError(t, err)
+
+ expectedMessages := []*pb.GetCommitMessagesResponse{
+ {
+ CommitId: commit1ID,
+ Message: []byte(message1),
+ },
+ {
+ CommitId: commit2ID,
+ Message: []byte(message2),
+ },
+ }
+ fetchedMessages := readAllMessagesFromClient(t, c)
+
+ require.Equal(t, expectedMessages, fetchedMessages)
+}
+
+func TestFailedGetCommitMessagesRequest(t *testing.T) {
+ server, serverSocketPath := startTestServices(t)
+ defer server.Stop()
+
+ client, conn := newCommitServiceClient(t, serverSocketPath)
+ defer conn.Close()
+
+ testCases := []struct {
+ desc string
+ request *pb.GetCommitMessagesRequest
+ code codes.Code
+ }{
+ {
+ desc: "empty Repository",
+ request: &pb.GetCommitMessagesRequest{
+ Repository: nil,
+ CommitIds: []string{"5937ac0a7beb003549fc5fd26fc247adbce4a52e"},
+ },
+ code: codes.InvalidArgument,
+ },
+ }
+
+ for _, testCase := range testCases {
+ t.Run(testCase.desc, func(t *testing.T) {
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
+ c, err := client.GetCommitMessages(ctx, testCase.request)
+ require.NoError(t, err)
+
+ for {
+ _, err = c.Recv()
+ if err != nil {
+ break
+ }
+ }
+
+ testhelper.AssertGrpcError(t, err, testCase.code, "")
+ })
+ }
+}
+
+func readAllMessagesFromClient(t *testing.T, c pb.CommitService_GetCommitMessagesClient) (messages []*pb.GetCommitMessagesResponse) {
+ for {
+ resp, err := c.Recv()
+ if err == io.EOF {
+ break
+ }
+ require.NoError(t, err)
+
+ if resp.CommitId != "" {
+ messages = append(messages, resp)
+ // first message contains a chunk of the message, so no need to append anything
+ continue
+ }
+
+ currentMessage := messages[len(messages)-1]
+ currentMessage.Message = append(currentMessage.Message, resp.Message...)
+ }
+
+ return
+}
diff --git a/internal/service/ref/tag_messages.go b/internal/service/ref/tag_messages.go
index 1412995ad..543070e7f 100644
--- a/internal/service/ref/tag_messages.go
+++ b/internal/service/ref/tag_messages.go
@@ -1,11 +1,53 @@
package ref
import (
- "gitlab.com/gitlab-org/gitaly/internal/helper"
+ "fmt"
+
+ "gitlab.com/gitlab-org/gitaly/internal/rubyserver"
pb "gitlab.com/gitlab-org/gitaly-proto/go"
+
+ "google.golang.org/grpc/codes"
+ "google.golang.org/grpc/status"
)
func (s *server) GetTagMessages(request *pb.GetTagMessagesRequest, stream pb.RefService_GetTagMessagesServer) error {
- return helper.Unimplemented
+ if err := validateGetTagMessagesRequest(request); err != nil {
+ return status.Errorf(codes.InvalidArgument, "GetTagMessages: %v", err)
+ }
+
+ ctx := stream.Context()
+
+ client, err := s.RefServiceClient(ctx)
+ if err != nil {
+ return err
+ }
+
+ clientCtx, err := rubyserver.SetHeaders(ctx, request.GetRepository())
+ if err != nil {
+ return err
+ }
+
+ rubyStream, err := client.GetTagMessages(clientCtx, request)
+ if err != nil {
+ return err
+ }
+
+ return rubyserver.Proxy(func() error {
+ resp, err := rubyStream.Recv()
+ if err != nil {
+ md := rubyStream.Trailer()
+ stream.SetTrailer(md)
+ return err
+ }
+ return stream.Send(resp)
+ })
+}
+
+func validateGetTagMessagesRequest(request *pb.GetTagMessagesRequest) error {
+ if request.GetRepository() == nil {
+ return fmt.Errorf("empty Repository")
+ }
+
+ return nil
}
diff --git a/internal/service/ref/tag_messages_test.go b/internal/service/ref/tag_messages_test.go
new file mode 100644
index 000000000..0c29ca768
--- /dev/null
+++ b/internal/service/ref/tag_messages_test.go
@@ -0,0 +1,120 @@
+package ref
+
+import (
+ "io"
+ "strings"
+ "testing"
+
+ "gitlab.com/gitlab-org/gitaly/internal/helper"
+ "gitlab.com/gitlab-org/gitaly/internal/testhelper"
+
+ pb "gitlab.com/gitlab-org/gitaly-proto/go"
+
+ "github.com/stretchr/testify/require"
+ "google.golang.org/grpc/codes"
+)
+
+func TestSuccessfulGetTagMessagesRequest(t *testing.T) {
+ server, serverSocketPath := runRefServiceServer(t)
+ defer server.Stop()
+
+ client, conn := newRefServiceClient(t, serverSocketPath)
+ defer conn.Close()
+
+ testRepo, testRepoPath, cleanupFn := testhelper.NewTestRepo(t)
+ defer cleanupFn()
+
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
+ message1 := strings.Repeat("a", helper.MaxCommitOrTagMessageSize*2)
+ message2 := strings.Repeat("b", helper.MaxCommitOrTagMessageSize)
+
+ tag1ID := testhelper.CreateTag(t, testRepoPath, "big-tag-1", "master", &testhelper.CreateTagOpts{Message: message1})
+ tag2ID := testhelper.CreateTag(t, testRepoPath, "big-tag-2", "master~", &testhelper.CreateTagOpts{Message: message2})
+
+ request := &pb.GetTagMessagesRequest{
+ Repository: testRepo,
+ TagIds: []string{tag1ID, tag2ID},
+ }
+
+ c, err := client.GetTagMessages(ctx, request)
+ require.NoError(t, err)
+
+ expectedMessages := []*pb.GetTagMessagesResponse{
+ {
+ TagId: tag1ID,
+ Message: []byte(message1 + "\n"),
+ },
+ {
+ TagId: tag2ID,
+ Message: []byte(message2 + "\n"),
+ },
+ }
+ fetchedMessages := readAllMessagesFromClient(t, c)
+
+ require.Equal(t, expectedMessages, fetchedMessages)
+}
+
+func TestFailedGetTagMessagesRequest(t *testing.T) {
+ server, serverSocketPath := runRefServiceServer(t)
+ defer server.Stop()
+
+ client, conn := newRefServiceClient(t, serverSocketPath)
+ defer conn.Close()
+
+ testCases := []struct {
+ desc string
+ request *pb.GetTagMessagesRequest
+ code codes.Code
+ }{
+ {
+ desc: "empty Repository",
+ request: &pb.GetTagMessagesRequest{
+ Repository: nil,
+ TagIds: []string{"5937ac0a7beb003549fc5fd26fc247adbce4a52e"},
+ },
+ code: codes.InvalidArgument,
+ },
+ }
+
+ for _, testCase := range testCases {
+ t.Run(testCase.desc, func(t *testing.T) {
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+
+ c, err := client.GetTagMessages(ctx, testCase.request)
+ require.NoError(t, err)
+
+ for {
+ _, err = c.Recv()
+ if err != nil {
+ break
+ }
+ }
+
+ testhelper.AssertGrpcError(t, err, testCase.code, "")
+ })
+ }
+}
+
+func readAllMessagesFromClient(t *testing.T, c pb.RefService_GetTagMessagesClient) (messages []*pb.GetTagMessagesResponse) {
+ for {
+ resp, err := c.Recv()
+ if err == io.EOF {
+ break
+ }
+ require.NoError(t, err)
+
+ if resp.TagId != "" {
+ messages = append(messages, resp)
+ // first message contains a chunk of the message, so no need to append anything
+ continue
+ }
+
+ currentMessage := messages[len(messages)-1]
+ currentMessage.Message = append(currentMessage.Message, resp.Message...)
+ }
+
+ return
+}
diff --git a/internal/service/repository/calculate_checksum.go b/internal/service/repository/calculate_checksum.go
index bbae4e94a..6f375d467 100644
--- a/internal/service/repository/calculate_checksum.go
+++ b/internal/service/repository/calculate_checksum.go
@@ -1,10 +1,10 @@
package repository
-// Stubbed out until https://gitlab.com/gitlab-org/gitaly/merge_requests/642 is done
-
import (
pb "gitlab.com/gitlab-org/gitaly-proto/go"
+
"gitlab.com/gitlab-org/gitaly/internal/helper"
+
"golang.org/x/net/context"
)
diff --git a/internal/tempdir/tempdir.go b/internal/tempdir/tempdir.go
index 6cff3f8ba..69565c590 100644
--- a/internal/tempdir/tempdir.go
+++ b/internal/tempdir/tempdir.go
@@ -2,17 +2,16 @@ package tempdir
import (
"context"
- "fmt"
"io/ioutil"
"os"
"path"
- "path/filepath"
"strings"
"time"
pb "gitlab.com/gitlab-org/gitaly-proto/go"
"gitlab.com/gitlab-org/gitaly/internal/config"
"gitlab.com/gitlab-org/gitaly/internal/helper"
+ "gitlab.com/gitlab-org/gitaly/internal/helper/housekeeping"
log "github.com/sirupsen/logrus"
)
@@ -22,6 +21,8 @@ const (
// directory name that could be provided by a user. The '+' character is
// not allowed in GitLab namespaces or repositories.
tmpRootPrefix = "+gitaly/tmp"
+
+ maxAge = 7 * 24 * time.Hour
)
// New returns the path of a new temporary directory for use with the
@@ -76,6 +77,8 @@ func StartCleaning() {
}
}
+type invalidCleanRoot string
+
func clean(dir string) error {
// If we start "cleaning up" the wrong directory we may delete user data
// which is Really Bad.
@@ -84,37 +87,27 @@ func clean(dir string) error {
panic(invalidCleanRoot("invalid tempdir clean root: panicking to prevent data loss"))
}
- return filepath.Walk(dir, cleanFunc)
-}
-
-const (
- maxAge = 7 * 24 * time.Hour
-)
-
-type invalidCleanRoot string
-
-func cleanFunc(path string, info os.FileInfo, errIncoming error) error {
- if errIncoming != nil && !os.IsNotExist(errIncoming) {
- return fmt.Errorf("incoming %q: %v", path, errIncoming)
- }
-
- if info == nil {
+ entries, err := ioutil.ReadDir(dir)
+ if os.IsNotExist(err) {
return nil
}
+ if err != nil {
+ return err
+ }
- if perm := info.Mode().Perm(); info.IsDir() && perm&0700 < 0700 {
- // Fix directory read permissions
- if err := os.Chmod(path, perm|0700); err != nil {
- return err
+ for _, info := range entries {
+ if time.Since(info.ModTime()) < maxAge {
+ continue
}
- }
- if time.Since(info.ModTime()) < maxAge {
- return nil
- }
+ fullPath := path.Join(dir, info.Name())
+ if err := housekeeping.FixDirectoryPermissions(fullPath); err != nil {
+ return err
+ }
- if err := os.Remove(path); err != nil && !info.IsDir() {
- return err
+ if err := os.RemoveAll(fullPath); err != nil {
+ return err
+ }
}
return nil
diff --git a/internal/tempdir/tempdir_test.go b/internal/tempdir/tempdir_test.go
index 833292abb..e4dcc3e74 100644
--- a/internal/tempdir/tempdir_test.go
+++ b/internal/tempdir/tempdir_test.go
@@ -74,39 +74,32 @@ func TestCleanSuccess(t *testing.T) {
recent := time.Now()
makeDir(t, "a", old)
+ makeDir(t, "a/b", recent) // Messes up mtime of "a", we fix that below
makeDir(t, "c", recent)
makeDir(t, "f", old)
- makeFile(t, "a/b", old)
+ makeFile(t, "a/b/g", old)
makeFile(t, "c/d", old)
makeFile(t, "e", recent)
// This is really evil and even breaks 'rm -rf'
+ require.NoError(t, chmod("a/b", 0), "apply evil permissions to 'a/b'")
require.NoError(t, chmod("a", 0), "apply evil permissions to 'a'")
+ require.NoError(t, chtimes("a", old), "reset mtime of 'a'")
+
assertEntries(t, "a", "c", "e", "f")
require.NoError(t, clean(cleanRoot), "walk first pass")
- // 'a' won't get removed because it's mtime is bumped when 'a/b' is deleted
- assertEntries(t, "a", "c", "e")
-
- info, err := stat("a")
- require.NoError(t, err)
- require.Equal(t, os.FileMode(0700), info.Mode().Perm(), "permissions of 'a' should have been fixed")
-
- _, err = stat("a/b")
- require.True(t, os.IsNotExist(err), "entry 'a/b' should be gone")
-
- require.NoError(t, clean(cleanRoot), "walk second pass")
- assertEntries(t, "a", "c", "e")
+ assertEntries(t, "c", "e")
}
func chmod(p string, mode os.FileMode) error {
return os.Chmod(path.Join(cleanRoot, p), mode)
}
-func stat(p string) (os.FileInfo, error) {
- return os.Stat(path.Join(cleanRoot, p))
+func chtimes(p string, t time.Time) error {
+ return os.Chtimes(path.Join(cleanRoot, p), t, t)
}
func assertEntries(t *testing.T, entries ...string) {
diff --git a/ruby/Gemfile b/ruby/Gemfile
index dce4cadc1..dd3eff029 100644
--- a/ruby/Gemfile
+++ b/ruby/Gemfile
@@ -2,7 +2,7 @@ source 'https://rubygems.org'
gem 'github-linguist', '~> 5.3.3', require: 'linguist'
gem 'gitlab-markup', '~> 1.6.2'
-gem 'gitaly-proto', '~> 0.91.0', require: 'gitaly'
+gem 'gitaly-proto', '~> 0.95.0', require: 'gitaly'
gem 'activesupport', '~> 5.0.2'
gem 'rdoc', '~> 4.2'
gem 'gollum-lib', '~> 4.2', require: false
diff --git a/ruby/Gemfile.lock b/ruby/Gemfile.lock
index 2b5287b3f..9146c4551 100644
--- a/ruby/Gemfile.lock
+++ b/ruby/Gemfile.lock
@@ -9,7 +9,7 @@ GEM
addressable (2.5.2)
public_suffix (>= 2.0.2, < 4.0)
ast (2.3.0)
- charlock_holmes (0.7.5)
+ charlock_holmes (0.7.6)
concurrent-ruby (1.0.5)
diff-lcs (1.3)
escape_utils (1.1.1)
@@ -17,9 +17,9 @@ GEM
multipart-post (>= 1.2, < 3)
gemojione (3.3.0)
json
- gitaly-proto (0.91.0)
+ gitaly-proto (0.95.0)
google-protobuf (~> 3.1)
- grpc (~> 1.0)
+ grpc (~> 1.10)
github-linguist (5.3.3)
charlock_holmes (~> 0.7.5)
escape_utils (~> 1.1.0)
@@ -141,7 +141,7 @@ PLATFORMS
DEPENDENCIES
activesupport (~> 5.0.2)
- gitaly-proto (~> 0.91.0)
+ gitaly-proto (~> 0.95.0)
github-linguist (~> 5.3.3)
gitlab-markup (~> 1.6.2)
gitlab-styles (~> 2.0.0)
diff --git a/ruby/lib/gitaly_server/commit_service.rb b/ruby/lib/gitaly_server/commit_service.rb
index b67dd6686..1f5afb4d8 100644
--- a/ruby/lib/gitaly_server/commit_service.rb
+++ b/ruby/lib/gitaly_server/commit_service.rb
@@ -133,6 +133,30 @@ module GitalyServer
end
end
+ def get_commit_messages(request, call)
+ bridge_exceptions do
+ repository = Gitlab::Git::Repository.from_gitaly(request.repository, call)
+
+ Enumerator.new do |y|
+ request.commit_ids.each do |commit_id|
+ commit = Gitlab::Git::Commit.find(repository, commit_id)
+ next unless commit
+
+ response = Gitaly::GetCommitMessagesResponse.new(commit_id: commit.id)
+ io = StringIO.new(commit.message)
+
+ while chunk = io.read(Gitlab.config.git.max_commit_or_tag_message_size)
+ response.message = chunk
+
+ y.yield response
+
+ response = Gitaly::GetCommitMessagesResponse.new
+ end
+ end
+ end
+ end
+ end
+
private
# yields either signature chunks or signed_text chunks to the passed block
diff --git a/ruby/lib/gitaly_server/ref_service.rb b/ruby/lib/gitaly_server/ref_service.rb
index 110261f42..62243ce3a 100644
--- a/ruby/lib/gitaly_server/ref_service.rb
+++ b/ruby/lib/gitaly_server/ref_service.rb
@@ -104,5 +104,29 @@ module GitalyServer
end
end
end
+
+ def get_tag_messages(request, call)
+ bridge_exceptions do
+ repository = Gitlab::Git::Repository.from_gitaly(request.repository, call)
+
+ Enumerator.new do |y|
+ request.tag_ids.each do |tag_id|
+ annotation = repository.rugged.rev_parse(tag_id)
+ next unless annotation
+
+ response = Gitaly::GetTagMessagesResponse.new(tag_id: tag_id)
+ io = StringIO.new(annotation.message)
+
+ while chunk = io.read(Gitlab.config.git.max_commit_or_tag_message_size)
+ response.message = chunk
+
+ y.yield response
+
+ response = Gitaly::GetTagMessagesResponse.new
+ end
+ end
+ end
+ end
+ end
end
end
diff --git a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/VERSION b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/VERSION
index c5c735103..5f8cbfdb7 100644
--- a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/VERSION
+++ b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/VERSION
@@ -1 +1 @@
-0.94.0
+0.95.0
diff --git a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/ref.pb.go b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/ref.pb.go
index 7cf41477b..908d06bbf 100644
--- a/vendor/gitlab.com/gitlab-org/gitaly-proto/go/ref.pb.go
+++ b/vendor/gitlab.com/gitlab-org/gitaly-proto/go/ref.pb.go
@@ -783,7 +783,7 @@ func (m *ListTagNamesContainingCommitResponse) GetTagNames() [][]byte {
type GetTagMessagesRequest struct {
Repository *Repository `protobuf:"bytes,1,opt,name=repository" json:"repository,omitempty"`
- TagNames [][]byte `protobuf:"bytes,2,rep,name=tag_names,json=tagNames,proto3" json:"tag_names,omitempty"`
+ TagIds []string `protobuf:"bytes,3,rep,name=tag_ids,json=tagIds" json:"tag_ids,omitempty"`
}
func (m *GetTagMessagesRequest) Reset() { *m = GetTagMessagesRequest{} }
@@ -798,17 +798,17 @@ func (m *GetTagMessagesRequest) GetRepository() *Repository {
return nil
}
-func (m *GetTagMessagesRequest) GetTagNames() [][]byte {
+func (m *GetTagMessagesRequest) GetTagIds() []string {
if m != nil {
- return m.TagNames
+ return m.TagIds
}
return nil
}
type GetTagMessagesResponse struct {
- // Only present for a new tag message
- TagName []byte `protobuf:"bytes,1,opt,name=tag_name,json=tagName,proto3" json:"tag_name,omitempty"`
Message []byte `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
+ // Only present for a new tag message
+ TagId string `protobuf:"bytes,3,opt,name=tag_id,json=tagId" json:"tag_id,omitempty"`
}
func (m *GetTagMessagesResponse) Reset() { *m = GetTagMessagesResponse{} }
@@ -816,18 +816,18 @@ func (m *GetTagMessagesResponse) String() string { return proto.Compa
func (*GetTagMessagesResponse) ProtoMessage() {}
func (*GetTagMessagesResponse) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{31} }
-func (m *GetTagMessagesResponse) GetTagName() []byte {
+func (m *GetTagMessagesResponse) GetMessage() []byte {
if m != nil {
- return m.TagName
+ return m.Message
}
return nil
}
-func (m *GetTagMessagesResponse) GetMessage() []byte {
+func (m *GetTagMessagesResponse) GetTagId() string {
if m != nil {
- return m.Message
+ return m.TagId
}
- return nil
+ return ""
}
func init() {
@@ -1626,88 +1626,90 @@ var _RefService_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("ref.proto", fileDescriptor8) }
var fileDescriptor8 = []byte{
- // 1326 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0xdd, 0x6e, 0x1a, 0xc7,
- 0x17, 0xf7, 0x62, 0x9b, 0xe0, 0x03, 0xc1, 0xeb, 0x89, 0xe3, 0xe0, 0x75, 0x12, 0x9c, 0xc9, 0xb7,
- 0xfe, 0x11, 0xfe, 0x97, 0xa8, 0xbd, 0x69, 0x2f, 0x8a, 0x81, 0x26, 0x24, 0x0e, 0xb6, 0x06, 0x9a,
- 0x46, 0x6a, 0xab, 0xd5, 0x02, 0xc3, 0xb2, 0x15, 0xb0, 0x74, 0x77, 0x48, 0xe2, 0x8b, 0xf4, 0xb2,
- 0x52, 0xd5, 0x4a, 0xbd, 0xeb, 0x23, 0xf4, 0x41, 0x7a, 0xd3, 0x8b, 0xbe, 0x54, 0xb5, 0x33, 0xb3,
- 0x5f, 0x78, 0xc1, 0x56, 0xa9, 0xd5, 0xab, 0xdd, 0x39, 0x73, 0xce, 0x6f, 0xce, 0xd7, 0x9c, 0x73,
- 0x06, 0x36, 0x1c, 0xda, 0x2f, 0x4d, 0x1c, 0x9b, 0xd9, 0x28, 0x6d, 0x5a, 0xcc, 0x18, 0x9e, 0x6a,
- 0x39, 0x77, 0x60, 0x38, 0xb4, 0x27, 0xa8, 0x5a, 0xd1, 0xb4, 0x6d, 0x73, 0x48, 0x0f, 0xf8, 0xaa,
- 0x33, 0xed, 0x1f, 0x30, 0x6b, 0x44, 0x5d, 0x66, 0x8c, 0x26, 0x82, 0x01, 0x13, 0xb8, 0xf9, 0x85,
- 0x35, 0xee, 0xd5, 0x68, 0xdf, 0x98, 0x0e, 0xd9, 0xa1, 0x63, 0x8c, 0xbb, 0x83, 0xa6, 0x31, 0xa2,
- 0x84, 0x7e, 0x3f, 0xa5, 0x2e, 0x43, 0x65, 0x00, 0x87, 0x4e, 0x6c, 0xd7, 0x62, 0xb6, 0x73, 0x5a,
- 0x50, 0xf6, 0x95, 0x47, 0xd9, 0x32, 0x2a, 0x89, 0xb3, 0x4a, 0x24, 0xd8, 0x21, 0x11, 0x2e, 0xfc,
- 0x14, 0x6e, 0xcd, 0xc1, 0x74, 0x27, 0xf6, 0xd8, 0xa5, 0x08, 0xc1, 0xda, 0xd8, 0x18, 0x51, 0x0e,
- 0x97, 0x23, 0xfc, 0x1f, 0x1f, 0xc3, 0xae, 0x27, 0x54, 0x19, 0x0e, 0x43, 0x01, 0x77, 0x19, 0x2d,
- 0xca, 0xa0, 0x25, 0x01, 0x4a, 0x15, 0xb6, 0x61, 0xdd, 0x3b, 0xd6, 0x2d, 0x28, 0xfb, 0xab, 0x8f,
- 0x72, 0x44, 0x2c, 0xf0, 0x11, 0xec, 0x48, 0x99, 0xb6, 0x61, 0x2e, 0xad, 0xc1, 0x01, 0xdc, 0x38,
- 0x83, 0xb6, 0xf0, 0xf8, 0x0f, 0x80, 0x3c, 0x01, 0x42, 0xfb, 0x4b, 0x86, 0x00, 0xed, 0xc1, 0x46,
- 0xd7, 0x1e, 0x8d, 0x2c, 0xa6, 0x5b, 0xbd, 0x42, 0x6a, 0x5f, 0x79, 0xb4, 0x41, 0x32, 0x82, 0xd0,
- 0xe8, 0xa1, 0x1d, 0x48, 0x4f, 0x1c, 0xda, 0xb7, 0xde, 0x17, 0x56, 0x79, 0x00, 0xe4, 0x0a, 0x3f,
- 0x86, 0x6b, 0xb1, 0xe3, 0x17, 0x44, 0xeb, 0x4f, 0x05, 0x0a, 0x1e, 0xef, 0x91, 0xdd, 0x35, 0xa4,
- 0x7f, 0x97, 0xf2, 0x15, 0xfa, 0x1c, 0xae, 0xb8, 0xb6, 0xc3, 0xf4, 0xce, 0x29, 0x57, 0x37, 0x5f,
- 0x7e, 0xe8, 0x0b, 0xcc, 0x3b, 0xa6, 0xd4, 0xb2, 0x1d, 0x76, 0x78, 0x4a, 0xd2, 0x2e, 0xff, 0xe2,
- 0x8f, 0x21, 0x2d, 0x28, 0x28, 0x03, 0x6b, 0xcd, 0xca, 0xab, 0xba, 0xba, 0x82, 0x36, 0x21, 0xfb,
- 0xe5, 0x49, 0xad, 0xd2, 0xae, 0xd7, 0xf4, 0x4a, 0xab, 0xaa, 0x2a, 0x48, 0x85, 0x9c, 0x4f, 0xa8,
- 0xd5, 0x5b, 0x55, 0x35, 0x85, 0xdf, 0x88, 0xbc, 0x9b, 0x39, 0x41, 0x9a, 0xfe, 0x29, 0x64, 0x3a,
- 0x92, 0xc6, 0x23, 0x95, 0x2d, 0x17, 0xe7, 0xa8, 0xe5, 0x8b, 0x90, 0x40, 0x00, 0xff, 0x9c, 0x12,
- 0xf1, 0x4f, 0xe0, 0x4a, 0xf2, 0xe9, 0xe2, 0x98, 0xdd, 0x87, 0xbc, 0xdc, 0x74, 0xa7, 0x9d, 0xef,
- 0x68, 0x97, 0xc9, 0xd8, 0x5d, 0x15, 0xd4, 0x96, 0x20, 0xa2, 0xe7, 0x20, 0x09, 0xba, 0x31, 0x65,
- 0x03, 0xdb, 0x29, 0xac, 0x71, 0xef, 0xdf, 0x9d, 0xa3, 0x75, 0x95, 0xf3, 0x56, 0x38, 0x2b, 0xc9,
- 0x75, 0x23, 0x2b, 0xd4, 0x04, 0x55, 0x22, 0x89, 0x0f, 0xa3, 0x4e, 0x61, 0xfd, 0xe2, 0x60, 0x9b,
- 0x42, 0xaa, 0xea, 0xcb, 0xe2, 0x77, 0xb0, 0xb7, 0x80, 0x3f, 0xd1, 0x21, 0xdb, 0xb0, 0x4e, 0x47,
- 0x86, 0x35, 0xe4, 0xce, 0xc8, 0x11, 0xb1, 0x40, 0x25, 0x58, 0xeb, 0x19, 0x8c, 0x72, 0xfb, 0xb3,
- 0x65, 0xad, 0x24, 0x2a, 0x5c, 0xc9, 0xaf, 0x70, 0xa5, 0xb6, 0x5f, 0xe1, 0x08, 0xe7, 0xc3, 0xbf,
- 0x29, 0xc1, 0xa5, 0xfe, 0x37, 0x12, 0xb5, 0x08, 0xd9, 0x11, 0x75, 0x4c, 0xda, 0xd3, 0xed, 0xf1,
- 0x50, 0x24, 0x6b, 0x86, 0x80, 0x20, 0x1d, 0x8f, 0x87, 0xa7, 0xe8, 0x21, 0x6c, 0x4a, 0x86, 0x20,
- 0x75, 0x56, 0xf9, 0x25, 0xcf, 0x0b, 0xb2, 0xaf, 0x04, 0xfe, 0x5d, 0x09, 0xea, 0xc3, 0x99, 0xc4,
- 0x3b, 0x3c, 0x93, 0x78, 0x0f, 0xa2, 0x5e, 0x4f, 0x10, 0x29, 0xc9, 0x0c, 0x0b, 0xe4, 0xb4, 0x67,
- 0x90, 0x16, 0xb4, 0x44, 0xe7, 0x3e, 0x86, 0x34, 0x33, 0x1c, 0x93, 0x32, 0x6e, 0x42, 0xb6, 0xbc,
- 0xe5, 0xe3, 0x3f, 0xf3, 0xa3, 0x46, 0x24, 0x03, 0x7e, 0x2e, 0xca, 0x92, 0xa8, 0x63, 0x4b, 0x55,
- 0xc4, 0x4f, 0x44, 0x85, 0x09, 0x90, 0xa4, 0xb5, 0x45, 0x58, 0x63, 0x86, 0xe9, 0x5b, 0x9a, 0xf5,
- 0x41, 0xda, 0x86, 0x49, 0xf8, 0x06, 0x7e, 0x03, 0x2a, 0xa1, 0xfd, 0xfa, 0x7b, 0xcb, 0x65, 0x4b,
- 0x05, 0x4f, 0x85, 0x55, 0x87, 0xf6, 0x65, 0x3e, 0x79, 0xbf, 0xf8, 0x31, 0x6c, 0x45, 0x90, 0xc3,
- 0xea, 0xfc, 0xd6, 0x18, 0x4e, 0x85, 0xc3, 0x32, 0x44, 0x2c, 0xf0, 0x0f, 0x70, 0xad, 0xea, 0x50,
- 0x83, 0x51, 0xff, 0x2e, 0xff, 0x73, 0x3d, 0xfc, 0x80, 0xa4, 0x22, 0x01, 0x29, 0x42, 0xd6, 0x65,
- 0x86, 0xc3, 0xf4, 0x89, 0x6d, 0x8d, 0xfd, 0xeb, 0x0d, 0x9c, 0x74, 0xe2, 0x51, 0xf0, 0x5f, 0x0a,
- 0x6c, 0xc7, 0x15, 0x08, 0xaa, 0x54, 0xda, 0x65, 0x06, 0x9b, 0xba, 0xfc, 0xf4, 0x7c, 0x78, 0x41,
- 0x93, 0xb8, 0x4b, 0x2d, 0xce, 0x4a, 0xa4, 0x08, 0x7a, 0x00, 0x69, 0x91, 0x31, 0x32, 0x0f, 0xf2,
- 0xbe, 0xb0, 0x14, 0x93, 0xbb, 0xb8, 0x09, 0x69, 0x21, 0x89, 0xd2, 0x90, 0x3a, 0x7e, 0xa9, 0xae,
- 0xa0, 0x3c, 0x40, 0x9d, 0x10, 0xbd, 0xfe, 0xa6, 0xd1, 0x6a, 0xb7, 0x54, 0xc5, 0x2b, 0xb6, 0xde,
- 0xba, 0xd1, 0x7c, 0x5d, 0x39, 0x6a, 0xd4, 0xd4, 0x14, 0xda, 0x83, 0x1b, 0x11, 0x82, 0xde, 0x6a,
- 0x57, 0x48, 0x5b, 0x3f, 0x39, 0x6e, 0x34, 0xdb, 0xea, 0x2a, 0xfe, 0x16, 0xae, 0xd5, 0xe8, 0x90,
- 0x5e, 0x92, 0x37, 0xf1, 0x0e, 0x6c, 0xc7, 0xe1, 0x85, 0xf5, 0xf8, 0x6b, 0xd8, 0xf2, 0x32, 0xf0,
- 0x72, 0x0e, 0xfd, 0x4c, 0x5c, 0x94, 0x99, 0xf0, 0x84, 0x1e, 0x56, 0x16, 0x7a, 0xf8, 0x27, 0x05,
- 0xb6, 0x84, 0xce, 0x84, 0xf6, 0x97, 0x4a, 0xf3, 0x27, 0x80, 0xe8, 0xfb, 0x2e, 0x9d, 0x30, 0xfd,
- 0x9d, 0xc5, 0x06, 0xba, 0x6c, 0xf6, 0x29, 0x5e, 0x85, 0x54, 0xb1, 0xf3, 0x95, 0xc5, 0x06, 0x27,
- 0x9c, 0xee, 0x59, 0xe2, 0xd0, 0xbe, 0x5f, 0xa5, 0xf8, 0x3f, 0xfe, 0x08, 0x50, 0x54, 0x15, 0x69,
- 0xc9, 0x1e, 0x6c, 0x98, 0x16, 0xd3, 0xa9, 0xe3, 0xd8, 0x0e, 0x57, 0x65, 0x83, 0x64, 0x4c, 0x8b,
- 0xd5, 0xbd, 0x35, 0xfe, 0x55, 0x81, 0x07, 0x47, 0x96, 0x1b, 0x99, 0xf7, 0xdc, 0xaa, 0x3d, 0x66,
- 0x86, 0x35, 0xb6, 0xc6, 0xa6, 0xac, 0x28, 0x97, 0x35, 0xd1, 0x6c, 0xc3, 0xfa, 0xd0, 0x1a, 0x59,
- 0xe2, 0xd6, 0x5c, 0x25, 0x62, 0x81, 0x09, 0x3c, 0x3c, 0x57, 0x21, 0x69, 0xd9, 0x1d, 0xc8, 0x89,
- 0x28, 0xe8, 0x62, 0x2c, 0x13, 0xbe, 0xca, 0x76, 0x42, 0xd1, 0x17, 0x6b, 0x19, 0x45, 0x4d, 0xe1,
- 0x5f, 0x14, 0xb8, 0xeb, 0x81, 0xfa, 0x13, 0xdd, 0x7f, 0x6c, 0x62, 0x03, 0xee, 0x2d, 0xd6, 0x26,
- 0x8c, 0x1c, 0x33, 0xcc, 0x98, 0x71, 0x19, 0x26, 0x85, 0xa4, 0x65, 0x03, 0xb8, 0xfe, 0x8c, 0x7a,
- 0x48, 0xaf, 0xa8, 0xeb, 0x1a, 0xe6, 0x72, 0x5d, 0x72, 0xd1, 0x79, 0xf8, 0x15, 0xec, 0xcc, 0x9e,
- 0x24, 0xd5, 0xdc, 0x85, 0x8c, 0x2f, 0x26, 0x9b, 0xd5, 0x15, 0x29, 0x85, 0x0a, 0x70, 0x65, 0x24,
- 0xd8, 0xe5, 0x95, 0xf3, 0x97, 0xe5, 0x3f, 0x00, 0x80, 0xd0, 0x7e, 0x8b, 0x3a, 0x6f, 0xad, 0x2e,
- 0x45, 0x7d, 0xb8, 0x9e, 0xf8, 0xfa, 0x40, 0xf7, 0xa2, 0x1d, 0x74, 0xde, 0x83, 0x47, 0xbb, 0x7f,
- 0x0e, 0x97, 0xac, 0x23, 0x2b, 0x48, 0x0f, 0xba, 0x62, 0x24, 0xc1, 0xd0, 0x9d, 0xc4, 0x36, 0x1d,
- 0x7d, 0x4a, 0x68, 0x78, 0x11, 0x8b, 0x0f, 0xff, 0x7f, 0x05, 0xbd, 0x86, 0xcd, 0x99, 0xe7, 0x03,
- 0xba, 0x3d, 0x23, 0x3a, 0xf3, 0x4a, 0xd1, 0x8a, 0x73, 0xf7, 0x23, 0xb8, 0xcf, 0x21, 0x1b, 0x19,
- 0xf3, 0x91, 0x16, 0x95, 0x89, 0x3f, 0x3d, 0xb4, 0xbd, 0xc4, 0xbd, 0xc0, 0x05, 0xdf, 0x88, 0x62,
- 0x1a, 0x9b, 0x9d, 0xd1, 0xfe, 0x79, 0x83, 0xbb, 0x76, 0x67, 0x01, 0x47, 0xa2, 0xfd, 0x01, 0xf6,
- 0xed, 0xb9, 0x43, 0x50, 0xb2, 0xfd, 0x89, 0xb8, 0x2f, 0x84, 0xfd, 0x72, 0x08, 0x89, 0xdb, 0x1f,
- 0x9f, 0x71, 0xe2, 0xf6, 0xcf, 0x4c, 0x2d, 0x1c, 0xeb, 0x10, 0x36, 0x82, 0xf1, 0x01, 0x15, 0xc2,
- 0x4b, 0x11, 0x9f, 0x55, 0xb4, 0xdd, 0x84, 0x9d, 0xc0, 0x8b, 0x2f, 0x21, 0x17, 0x6d, 0xd4, 0x68,
- 0x2f, 0xb9, 0x7d, 0x0b, 0xa4, 0x9b, 0x8b, 0x7a, 0xbb, 0x00, 0x8b, 0xf6, 0xbd, 0x10, 0x2c, 0xa1,
- 0xd9, 0x86, 0x60, 0x89, 0xad, 0x72, 0x05, 0xd5, 0x01, 0xc2, 0x7e, 0x86, 0x76, 0xa3, 0xce, 0x88,
- 0x03, 0x69, 0x49, 0x5b, 0x51, 0x98, 0xb0, 0x99, 0x84, 0x30, 0x67, 0x7a, 0x5d, 0x08, 0x73, 0xb6,
- 0xf7, 0xe0, 0x15, 0xf4, 0xa3, 0x02, 0xc5, 0x73, 0xea, 0x39, 0x2a, 0xf9, 0x08, 0x17, 0xeb, 0x44,
- 0xda, 0xc1, 0x85, 0xf9, 0x23, 0x41, 0xff, 0x00, 0x37, 0x17, 0x15, 0x5d, 0xf4, 0xbf, 0x28, 0xe8,
- 0x39, 0x8d, 0x42, 0x7b, 0x72, 0x31, 0xe6, 0xc8, 0xf1, 0x2d, 0xc8, 0xc7, 0xcb, 0x27, 0xba, 0x15,
- 0xcc, 0xee, 0x49, 0x05, 0x5c, 0xbb, 0x3d, 0x6f, 0x3b, 0x04, 0xed, 0xa4, 0xf9, 0xfb, 0xe9, 0xe9,
- 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd6, 0x2f, 0xbc, 0x6b, 0x52, 0x12, 0x00, 0x00,
+ // 1350 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0x4f, 0x6f, 0x1a, 0x47,
+ 0x14, 0xf7, 0x62, 0x9b, 0xc0, 0x83, 0xe0, 0xf5, 0xc4, 0x71, 0xc8, 0x3a, 0x09, 0xce, 0xe4, 0xbf,
+ 0x1a, 0xe1, 0x96, 0xa8, 0xbd, 0xb4, 0x87, 0x62, 0xa0, 0x09, 0x89, 0x83, 0xad, 0x81, 0xa6, 0xa9,
+ 0xda, 0x6a, 0xb5, 0xc0, 0xb0, 0xde, 0x0a, 0x58, 0xba, 0x3b, 0x24, 0xf1, 0x21, 0x3d, 0x56, 0xaa,
+ 0x5a, 0xa9, 0xb7, 0x7e, 0x84, 0x7e, 0x90, 0x5e, 0x7a, 0xe8, 0x97, 0xaa, 0x76, 0x66, 0xf6, 0x1f,
+ 0x5e, 0xb0, 0x55, 0x6a, 0xf5, 0x04, 0xf3, 0xe6, 0xbd, 0xdf, 0xfb, 0x3b, 0xef, 0xbd, 0x85, 0xac,
+ 0x43, 0x07, 0xe5, 0x89, 0x63, 0x33, 0x1b, 0xa5, 0x4d, 0x8b, 0x19, 0xc3, 0x13, 0x2d, 0xef, 0x1e,
+ 0x1b, 0x0e, 0xed, 0x0b, 0xaa, 0x56, 0x32, 0x6d, 0xdb, 0x1c, 0xd2, 0x3d, 0x7e, 0xea, 0x4e, 0x07,
+ 0x7b, 0xcc, 0x1a, 0x51, 0x97, 0x19, 0xa3, 0x89, 0x60, 0xc0, 0x04, 0x6e, 0x7c, 0x61, 0x8d, 0xfb,
+ 0x75, 0x3a, 0x30, 0xa6, 0x43, 0xb6, 0xef, 0x18, 0xe3, 0xde, 0x71, 0xcb, 0x18, 0x51, 0x42, 0x7f,
+ 0x98, 0x52, 0x97, 0xa1, 0x0a, 0x80, 0x43, 0x27, 0xb6, 0x6b, 0x31, 0xdb, 0x39, 0x29, 0x2a, 0xbb,
+ 0xca, 0xc3, 0x5c, 0x05, 0x95, 0x85, 0xae, 0x32, 0x09, 0x6e, 0x48, 0x84, 0x0b, 0x3f, 0x81, 0x9b,
+ 0x73, 0x30, 0xdd, 0x89, 0x3d, 0x76, 0x29, 0x42, 0xb0, 0x36, 0x36, 0x46, 0x94, 0xc3, 0xe5, 0x09,
+ 0xff, 0x8f, 0x0f, 0xe1, 0xba, 0x27, 0x54, 0x1d, 0x0e, 0x43, 0x01, 0x77, 0x19, 0x2b, 0x2a, 0xa0,
+ 0x25, 0x01, 0x4a, 0x13, 0xb6, 0x60, 0xdd, 0x53, 0xeb, 0x16, 0x95, 0xdd, 0xd5, 0x87, 0x79, 0x22,
+ 0x0e, 0xf8, 0x00, 0xb6, 0xa5, 0x4c, 0xc7, 0x30, 0x97, 0xb6, 0x60, 0x0f, 0xae, 0x9d, 0x42, 0x5b,
+ 0xa8, 0xfe, 0x3d, 0x20, 0x4f, 0x80, 0xd0, 0xc1, 0x92, 0x29, 0x40, 0x3b, 0x90, 0xed, 0xd9, 0xa3,
+ 0x91, 0xc5, 0x74, 0xab, 0x5f, 0x4c, 0xed, 0x2a, 0x0f, 0xb3, 0x24, 0x23, 0x08, 0xcd, 0x3e, 0xda,
+ 0x86, 0xf4, 0xc4, 0xa1, 0x03, 0xeb, 0x5d, 0x71, 0x95, 0x27, 0x40, 0x9e, 0xf0, 0x23, 0xb8, 0x12,
+ 0x53, 0xbf, 0x20, 0x5b, 0x7f, 0x29, 0x50, 0xf4, 0x78, 0x0f, 0xec, 0x9e, 0x21, 0xe3, 0xbb, 0x54,
+ 0xac, 0xd0, 0xe7, 0x70, 0xc9, 0xb5, 0x1d, 0xa6, 0x77, 0x4f, 0xb8, 0xb9, 0x85, 0xca, 0x03, 0x5f,
+ 0x60, 0x9e, 0x9a, 0x72, 0xdb, 0x76, 0xd8, 0xfe, 0x09, 0x49, 0xbb, 0xfc, 0x17, 0x7f, 0x0c, 0x69,
+ 0x41, 0x41, 0x19, 0x58, 0x6b, 0x55, 0x5f, 0x36, 0xd4, 0x15, 0xb4, 0x01, 0xb9, 0x2f, 0x8f, 0xea,
+ 0xd5, 0x4e, 0xa3, 0xae, 0x57, 0xdb, 0x35, 0x55, 0x41, 0x2a, 0xe4, 0x7d, 0x42, 0xbd, 0xd1, 0xae,
+ 0xa9, 0x29, 0xfc, 0x5a, 0xd4, 0xdd, 0x8c, 0x06, 0xe9, 0xfa, 0xa7, 0x90, 0xe9, 0x4a, 0x1a, 0xcf,
+ 0x54, 0xae, 0x52, 0x9a, 0x63, 0x96, 0x2f, 0x42, 0x02, 0x01, 0xfc, 0x4b, 0x4a, 0xe4, 0x3f, 0x81,
+ 0x2b, 0x29, 0xa6, 0x8b, 0x73, 0x76, 0x0f, 0x0a, 0xf2, 0xd2, 0x9d, 0x76, 0xbf, 0xa7, 0x3d, 0x26,
+ 0x73, 0x77, 0x59, 0x50, 0xdb, 0x82, 0x88, 0x9e, 0x81, 0x24, 0xe8, 0xc6, 0x94, 0x1d, 0xdb, 0x4e,
+ 0x71, 0x8d, 0x47, 0xff, 0xce, 0x1c, 0xab, 0x6b, 0x9c, 0xb7, 0xca, 0x59, 0x49, 0xbe, 0x17, 0x39,
+ 0xa1, 0x16, 0xa8, 0x12, 0x49, 0xfc, 0x30, 0xea, 0x14, 0xd7, 0xcf, 0x0f, 0xb6, 0x21, 0xa4, 0x6a,
+ 0xbe, 0x2c, 0x7e, 0x0b, 0x3b, 0x0b, 0xf8, 0x13, 0x03, 0xb2, 0x05, 0xeb, 0x74, 0x64, 0x58, 0x43,
+ 0x1e, 0x8c, 0x3c, 0x11, 0x07, 0x54, 0x86, 0xb5, 0xbe, 0xc1, 0x28, 0xf7, 0x3f, 0x57, 0xd1, 0xca,
+ 0xa2, 0xc3, 0x95, 0xfd, 0x0e, 0x57, 0xee, 0xf8, 0x1d, 0x8e, 0x70, 0x3e, 0xfc, 0xbb, 0x12, 0x3c,
+ 0xea, 0xff, 0xa2, 0x50, 0x4b, 0x90, 0x1b, 0x51, 0xc7, 0xa4, 0x7d, 0xdd, 0x1e, 0x0f, 0x45, 0xb1,
+ 0x66, 0x08, 0x08, 0xd2, 0xe1, 0x78, 0x78, 0x82, 0x1e, 0xc0, 0x86, 0x64, 0x08, 0x4a, 0x67, 0x95,
+ 0x3f, 0xf2, 0x82, 0x20, 0xfb, 0x46, 0xe0, 0x3f, 0x94, 0xa0, 0x3f, 0x9c, 0x2a, 0xbc, 0xfd, 0x53,
+ 0x85, 0x77, 0x3f, 0x1a, 0xf5, 0x04, 0x91, 0xb2, 0xac, 0xb0, 0x40, 0x4e, 0x7b, 0x0a, 0x69, 0x41,
+ 0x4b, 0x0c, 0xee, 0x23, 0x48, 0x33, 0xc3, 0x31, 0x29, 0xe3, 0x2e, 0xe4, 0x2a, 0x9b, 0x3e, 0xfe,
+ 0x53, 0x3f, 0x6b, 0x44, 0x32, 0xe0, 0x67, 0xa2, 0x2d, 0x89, 0x3e, 0xb6, 0x54, 0x47, 0xfc, 0x44,
+ 0x74, 0x98, 0x00, 0x49, 0x7a, 0x5b, 0x82, 0x35, 0x66, 0x98, 0xbe, 0xa7, 0x39, 0x1f, 0xa4, 0x63,
+ 0x98, 0x84, 0x5f, 0xe0, 0xd7, 0xa0, 0x12, 0x3a, 0x68, 0xbc, 0xb3, 0x5c, 0xb6, 0x54, 0xf2, 0x54,
+ 0x58, 0x75, 0xe8, 0x40, 0xd6, 0x93, 0xf7, 0x17, 0x3f, 0x82, 0xcd, 0x08, 0x72, 0xd8, 0x9d, 0xdf,
+ 0x18, 0xc3, 0xa9, 0x08, 0x58, 0x86, 0x88, 0x03, 0xfe, 0x11, 0xae, 0xd4, 0x1c, 0x6a, 0x30, 0xea,
+ 0xbf, 0xe5, 0x7f, 0x6f, 0x87, 0x9f, 0x90, 0x54, 0x24, 0x21, 0x25, 0xc8, 0xb9, 0xcc, 0x70, 0x98,
+ 0x3e, 0xb1, 0xad, 0xb1, 0xff, 0xbc, 0x81, 0x93, 0x8e, 0x3c, 0x0a, 0xfe, 0x5b, 0x81, 0xad, 0xb8,
+ 0x01, 0x41, 0x97, 0x4a, 0xbb, 0xcc, 0x60, 0x53, 0x97, 0x6b, 0x2f, 0x84, 0x0f, 0x34, 0x89, 0xbb,
+ 0xdc, 0xe6, 0xac, 0x44, 0x8a, 0xa0, 0xfb, 0x90, 0x16, 0x15, 0x23, 0xeb, 0xa0, 0xe0, 0x0b, 0x4b,
+ 0x31, 0x79, 0x8b, 0x5b, 0x90, 0x16, 0x92, 0x28, 0x0d, 0xa9, 0xc3, 0x17, 0xea, 0x0a, 0x2a, 0x00,
+ 0x34, 0x08, 0xd1, 0x1b, 0xaf, 0x9b, 0xed, 0x4e, 0x5b, 0x55, 0xbc, 0x66, 0xeb, 0x9d, 0x9b, 0xad,
+ 0x57, 0xd5, 0x83, 0x66, 0x5d, 0x4d, 0xa1, 0x1d, 0xb8, 0x16, 0x21, 0xe8, 0xed, 0x4e, 0x95, 0x74,
+ 0xf4, 0xa3, 0xc3, 0x66, 0xab, 0xa3, 0xae, 0xe2, 0xef, 0xe0, 0x4a, 0x9d, 0x0e, 0xe9, 0x05, 0x45,
+ 0x13, 0x6f, 0xc3, 0x56, 0x1c, 0x5e, 0x78, 0x8f, 0xbf, 0x81, 0x4d, 0xaf, 0x02, 0x2f, 0x46, 0xe9,
+ 0x67, 0xe2, 0xa1, 0xcc, 0xa4, 0x27, 0x8c, 0xb0, 0xb2, 0x30, 0xc2, 0x3f, 0x2b, 0xb0, 0x29, 0x6c,
+ 0x26, 0x74, 0xb0, 0x54, 0x99, 0x3f, 0x06, 0x44, 0xdf, 0xf5, 0xe8, 0x84, 0xe9, 0x6f, 0x2d, 0x76,
+ 0xac, 0xcb, 0x61, 0x9f, 0xe2, 0x5d, 0x48, 0x15, 0x37, 0x5f, 0x59, 0xec, 0xf8, 0x88, 0xd3, 0x3d,
+ 0x4f, 0x1c, 0x3a, 0xf0, 0xbb, 0x14, 0xff, 0x8f, 0x3f, 0x02, 0x14, 0x35, 0x45, 0x7a, 0xb2, 0x03,
+ 0x59, 0xd3, 0x62, 0x3a, 0x75, 0x1c, 0xdb, 0xe1, 0xa6, 0x64, 0x49, 0xc6, 0xb4, 0x58, 0xc3, 0x3b,
+ 0xe3, 0xdf, 0x14, 0xb8, 0x7f, 0x60, 0xb9, 0x91, 0x7d, 0xcf, 0xad, 0xd9, 0x63, 0x66, 0x58, 0x63,
+ 0x6b, 0x6c, 0xca, 0x8e, 0x72, 0x51, 0x1b, 0xcd, 0x16, 0xac, 0x0f, 0xad, 0x91, 0x25, 0x5e, 0xcd,
+ 0x65, 0x22, 0x0e, 0x98, 0xc0, 0x83, 0x33, 0x0d, 0x92, 0x9e, 0xdd, 0x86, 0xbc, 0xc8, 0x82, 0x2e,
+ 0xd6, 0x32, 0x11, 0xab, 0x5c, 0x37, 0x14, 0x7d, 0xbe, 0x96, 0x51, 0xd4, 0x14, 0xfe, 0x55, 0x81,
+ 0x3b, 0x1e, 0xa8, 0xbf, 0xd1, 0xfd, 0xcf, 0x2e, 0x36, 0xe1, 0xee, 0x62, 0x6b, 0xc2, 0xcc, 0x31,
+ 0xc3, 0x8c, 0x39, 0x97, 0x61, 0x52, 0x48, 0x7a, 0x36, 0x85, 0xab, 0x4f, 0xa9, 0x87, 0xf4, 0x92,
+ 0xba, 0xae, 0x61, 0x2e, 0x37, 0x25, 0xaf, 0xc1, 0x25, 0x4f, 0x9f, 0xd5, 0x17, 0x65, 0x95, 0xf5,
+ 0x66, 0x89, 0xd9, 0xec, 0x7b, 0xba, 0x52, 0xea, 0x2a, 0x09, 0x8d, 0xc1, 0x5f, 0xc3, 0xf6, 0xac,
+ 0x5a, 0x69, 0x73, 0x11, 0x2e, 0x8d, 0x04, 0x4d, 0x3e, 0x32, 0xff, 0x88, 0xae, 0x7a, 0xb3, 0xcb,
+ 0x43, 0xe7, 0xc1, 0xc8, 0x92, 0x75, 0x0e, 0x2e, 0xfc, 0xe0, 0x7e, 0x71, 0xec, 0xca, 0x9f, 0x00,
+ 0x40, 0xe8, 0xa0, 0x4d, 0x9d, 0x37, 0x56, 0x8f, 0xa2, 0x01, 0x5c, 0x4d, 0xfc, 0x2c, 0x41, 0x77,
+ 0xa3, 0xa3, 0x75, 0xde, 0x97, 0x90, 0x76, 0xef, 0x0c, 0x2e, 0xd9, 0x60, 0x56, 0x90, 0x1e, 0x8c,
+ 0xcb, 0x48, 0xe5, 0xa1, 0xdb, 0x89, 0xf3, 0x3b, 0xfa, 0x8d, 0xa1, 0xe1, 0x45, 0x2c, 0x3e, 0xfc,
+ 0x87, 0x0a, 0x7a, 0x05, 0x1b, 0x33, 0xdf, 0x15, 0xe8, 0xd6, 0x8c, 0xe8, 0xcc, 0xe7, 0x8b, 0x56,
+ 0x9a, 0x7b, 0x1f, 0xc1, 0x7d, 0x06, 0xb9, 0xc8, 0xfe, 0x8f, 0xb4, 0xa8, 0x4c, 0xfc, 0x9b, 0x44,
+ 0xdb, 0x49, 0xbc, 0x0b, 0x42, 0xf0, 0xad, 0xe8, 0xb2, 0xb1, 0xa5, 0x1a, 0xed, 0x9e, 0xb5, 0xd1,
+ 0x6b, 0xb7, 0x17, 0x70, 0x24, 0xfa, 0x1f, 0x60, 0xdf, 0x9a, 0xbb, 0x1d, 0x25, 0xfb, 0x9f, 0x88,
+ 0xfb, 0x5c, 0xf8, 0x2f, 0xb7, 0x93, 0xb8, 0xff, 0xf1, 0xe5, 0x27, 0xee, 0xff, 0xcc, 0x3a, 0xc3,
+ 0xb1, 0xf6, 0x21, 0x1b, 0xec, 0x15, 0xa8, 0x18, 0xbe, 0x96, 0xf8, 0x12, 0xa3, 0x5d, 0x4f, 0xb8,
+ 0x09, 0xa2, 0xf8, 0x02, 0xf2, 0xd1, 0x09, 0x8e, 0x76, 0x92, 0xe7, 0xba, 0x40, 0xba, 0xb1, 0x68,
+ 0xe8, 0x0b, 0xb0, 0xe8, 0x40, 0x0c, 0xc1, 0x12, 0xa6, 0x70, 0x08, 0x96, 0x38, 0x43, 0x57, 0x50,
+ 0x03, 0x20, 0x1c, 0x74, 0xe8, 0x7a, 0x34, 0x18, 0x71, 0x20, 0x2d, 0xe9, 0x2a, 0x0a, 0x13, 0x4e,
+ 0x99, 0x10, 0xe6, 0xd4, 0x10, 0x0c, 0x61, 0x4e, 0x0f, 0x25, 0xbc, 0x82, 0x7e, 0x52, 0xa0, 0x74,
+ 0x46, 0xa3, 0x47, 0x65, 0x1f, 0xe1, 0x7c, 0x23, 0x4a, 0xdb, 0x3b, 0x37, 0x7f, 0x24, 0xe9, 0xef,
+ 0xe1, 0xc6, 0xa2, 0x6e, 0x8c, 0x3e, 0x88, 0x82, 0x9e, 0x31, 0x41, 0xb4, 0xc7, 0xe7, 0x63, 0x8e,
+ 0xa8, 0x6f, 0x43, 0x21, 0xde, 0x4a, 0xd1, 0xcd, 0x60, 0xa9, 0x4f, 0xea, 0xec, 0xda, 0xad, 0x79,
+ 0xd7, 0x21, 0x68, 0x37, 0xcd, 0x3f, 0xac, 0x9e, 0xfc, 0x13, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x28,
+ 0x88, 0xdb, 0x6b, 0x12, 0x00, 0x00,
}
diff --git a/vendor/vendor.json b/vendor/vendor.json
index c4a28acbd..9dcb37b0e 100644
--- a/vendor/vendor.json
+++ b/vendor/vendor.json
@@ -201,12 +201,12 @@
"revisionTime": "2017-12-31T12:27:32Z"
},
{
- "checksumSHA1": "gtyakRTap6GHgVfZ3ijhMO4YbgM=",
+ "checksumSHA1": "MVrf0BwLEpU3uGHmYOrIWVoJGCk=",
"path": "gitlab.com/gitlab-org/gitaly-proto/go",
- "revision": "be1ce3e479f520b3514c0e9fe22fb6b3f802e7af",
- "revisionTime": "2018-03-29T21:53:13Z",
- "version": "v0.94.0",
- "versionExact": "v0.94.0"
+ "revision": "00d4006669b30b6a0fe66aaa9fa72285d18616fb",
+ "revisionTime": "2018-04-03T14:25:38Z",
+ "version": "v0.95.0",
+ "versionExact": "v0.95.0"
},
{
"checksumSHA1": "nqWNlnMmVpt628zzvyo6Yv2CX5Q=",