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:
authorJacob Vosmaer <jacob@gitlab.com>2019-11-01 21:27:59 +0300
committerPaul Okstad <pokstad@gitlab.com>2019-11-01 21:27:59 +0300
commit6867e5bfc38b68a7abb82d60bdd444f25ffc65ad (patch)
tree37baf8269b1382d29013598ae835f24367ad9da1
parent226eef60665b0929bd3db358c81018c03f45fb29 (diff)
Use Git DSL in receive-pack RPC's
-rw-r--r--internal/git/receivepack.go8
-rw-r--r--internal/service/smarthttp/inforefs.go18
-rw-r--r--internal/service/smarthttp/receive_pack.go12
-rw-r--r--internal/service/ssh/receive_pack.go11
4 files changed, 30 insertions, 19 deletions
diff --git a/internal/git/receivepack.go b/internal/git/receivepack.go
index f4dbdba8c..65d764573 100644
--- a/internal/git/receivepack.go
+++ b/internal/git/receivepack.go
@@ -29,15 +29,15 @@ func HookEnv(req ReceivePackRequest) []string {
// ReceivePackConfig contains config options we want to enforce when
// receiving a push with git-receive-pack.
-func ReceivePackConfig() []string {
- return []string{
- fmt.Sprintf("core.hooksPath=%s", hooks.Path()),
+func ReceivePackConfig() []Option {
+ return []Option{
+ ValueFlag{"-c", fmt.Sprintf("core.hooksPath=%s", hooks.Path())},
// In case the repository belongs to an object pool, we want to prevent
// Git from including the pool's refs in the ref advertisement. We do
// this by rigging core.alternateRefsCommand to produce no output.
// Because Git itself will append the pool repository directory, the
// command ends with a "#". The end result is that Git runs `/bin/sh -c 'exit 0 # /path/to/pool.git`.
- "core.alternateRefsCommand=exit 0 #",
+ ValueFlag{"-c", "core.alternateRefsCommand=exit 0 #"},
}
}
diff --git a/internal/service/smarthttp/inforefs.go b/internal/service/smarthttp/inforefs.go
index bff368250..e56745824 100644
--- a/internal/service/smarthttp/inforefs.go
+++ b/internal/service/smarthttp/inforefs.go
@@ -50,19 +50,19 @@ func handleInfoRefs(ctx context.Context, service string, req *gitalypb.InfoRefsR
return err
}
- opts := req.GitConfigOptions
+ var globalOpts []git.Option
if service == "receive-pack" {
- opts = append(git.ReceivePackConfig(), opts...)
+ globalOpts = append(globalOpts, git.ReceivePackConfig()...)
}
-
- var args []string
- for _, params := range opts {
- args = append(args, "-c", params)
+ for _, o := range req.GitConfigOptions {
+ globalOpts = append(globalOpts, git.ValueFlag{"-c", o})
}
- args = append(args, service, "--stateless-rpc", "--advertise-refs", repoPath)
-
- cmd, err := git.BareCommand(ctx, nil, nil, nil, env, args...)
+ cmd, err := git.SafeBareCmd(ctx, nil, nil, nil, env, globalOpts, git.SubCmd{
+ Name: service,
+ Flags: []git.Option{git.Flag{"--stateless-rpc"}, git.Flag{"--advertise-refs"}},
+ Args: []string{repoPath},
+ })
if err != nil {
if _, ok := status.FromError(err); ok {
diff --git a/internal/service/smarthttp/receive_pack.go b/internal/service/smarthttp/receive_pack.go
index 4014d4ad8..e4b4e0bd8 100644
--- a/internal/service/smarthttp/receive_pack.go
+++ b/internal/service/smarthttp/receive_pack.go
@@ -48,10 +48,16 @@ func (s *server) PostReceivePack(stream gitalypb.SmartHTTPService_PostReceivePac
env = git.AddGitProtocolEnv(ctx, req, env)
env = append(env, command.GitEnv...)
- opts := append(git.ReceivePackConfig(), req.GitConfigOptions...)
+ globalOpts := git.ReceivePackConfig()
+ for _, o := range req.GitConfigOptions {
+ globalOpts = append(globalOpts, git.ValueFlag{"-c", o})
+ }
- gitOptions := git.BuildGitOptions(opts, "receive-pack", "--stateless-rpc", repoPath)
- cmd, err := git.BareCommand(ctx, stdin, stdout, nil, env, gitOptions...)
+ cmd, err := git.SafeBareCmd(ctx, stdin, stdout, nil, env, globalOpts, git.SubCmd{
+ Name: "receive-pack",
+ Flags: []git.Option{git.Flag{"--stateless-rpc"}},
+ Args: []string{repoPath},
+ })
if err != nil {
return status.Errorf(codes.Unavailable, "PostReceivePack: %v", err)
diff --git a/internal/service/ssh/receive_pack.go b/internal/service/ssh/receive_pack.go
index 170a28b5c..89d743d3e 100644
--- a/internal/service/ssh/receive_pack.go
+++ b/internal/service/ssh/receive_pack.go
@@ -60,10 +60,15 @@ func sshReceivePack(stream gitalypb.SSHService_SSHReceivePackServer, req *gitaly
env = git.AddGitProtocolEnv(ctx, req, env)
env = append(env, command.GitEnv...)
- opts := append(git.ReceivePackConfig(), req.GitConfigOptions...)
+ globalOpts := git.ReceivePackConfig()
+ for _, o := range req.GitConfigOptions {
+ globalOpts = append(globalOpts, git.ValueFlag{"-c", o})
+ }
- gitOptions := git.BuildGitOptions(opts, "receive-pack", repoPath)
- cmd, err := git.BareCommand(ctx, stdin, stdout, stderr, env, gitOptions...)
+ cmd, err := git.SafeBareCmd(ctx, stdin, stdout, stderr, env, globalOpts, git.SubCmd{
+ Name: "receive-pack",
+ Args: []string{repoPath},
+ })
if err != nil {
return fmt.Errorf("start cmd: %v", err)