diff options
author | Stan Hu <stanhu@gmail.com> | 2018-04-05 22:08:49 +0300 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2018-04-05 22:08:49 +0300 |
commit | 2e62a4544a79c177fd16b791d3683cdfa68f75a3 (patch) | |
tree | 14a3003eec43736f65bf8346eb9d94fafb690e00 | |
parent | b8802e3dd039c30e80c7e2921b04802c31a477f8 (diff) | |
parent | e48707d1354f24fe67fec5a88f1d93541ac9cae3 (diff) |
Merge branch 'master' into sh-add-cleanup
-rw-r--r-- | .gitlab/issue_templates/Migration_Acceptance_Testing.md | 32 | ||||
-rw-r--r-- | CHANGELOG.md | 7 | ||||
-rw-r--r-- | VERSION | 2 | ||||
-rw-r--r-- | internal/helper/housekeeping/housekeeping.go | 40 | ||||
-rw-r--r-- | internal/helper/housekeeping/housekeeping_test.go | 10 | ||||
-rw-r--r-- | internal/service/commit/commit_messages.go | 46 | ||||
-rw-r--r-- | internal/service/commit/commit_messages_test.go | 120 | ||||
-rw-r--r-- | internal/service/ref/tag_messages.go | 46 | ||||
-rw-r--r-- | internal/service/ref/tag_messages_test.go | 120 | ||||
-rw-r--r-- | internal/service/repository/calculate_checksum.go | 4 | ||||
-rw-r--r-- | internal/tempdir/tempdir.go | 47 | ||||
-rw-r--r-- | internal/tempdir/tempdir_test.go | 23 | ||||
-rw-r--r-- | ruby/Gemfile | 2 | ||||
-rw-r--r-- | ruby/Gemfile.lock | 8 | ||||
-rw-r--r-- | ruby/lib/gitaly_server/commit_service.rb | 24 | ||||
-rw-r--r-- | ruby/lib/gitaly_server/ref_service.rb | 24 | ||||
-rw-r--r-- | vendor/gitlab.com/gitlab-org/gitaly-proto/go/VERSION | 2 | ||||
-rw-r--r-- | vendor/gitlab.com/gitlab-org/gitaly-proto/go/ref.pb.go | 190 | ||||
-rw-r--r-- | vendor/vendor.json | 10 |
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 @@ -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=", |