mirror of
https://github.com/go-gitea/gitea.git
synced 2024-12-04 14:46:57 -05:00
- Backport of #20616 - Git only decides to use the Wire 2 protocol when `git {receive,upload}-pack` receive the `GIT_PROTOCOL` environment with as value `version=2`. Currently the internal SSH Server wasn't passing this environment through. The `gitea serv` code already passed all received environments to the git command, so no code changes there. - This is mentioned in Git manual, https://git-scm.com/docs/git#Documentation/git.txt-codeGITPROTOCOLcode
This commit is contained in:
parent
56b99551ae
commit
a6c2a1a117
@ -75,11 +75,21 @@ func sessionHandler(session ssh.Session) {
|
|||||||
ctx, cancel := context.WithCancel(session.Context())
|
ctx, cancel := context.WithCancel(session.Context())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
gitProtocol := ""
|
||||||
|
for _, env := range session.Environ() {
|
||||||
|
if strings.HasPrefix(env, "GIT_PROTOCOL=") {
|
||||||
|
// The value would be version=2, so using normal split doesn't work here.
|
||||||
|
gitProtocol = strings.SplitN(env, "=", 2)[1]
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cmd := exec.CommandContext(ctx, setting.AppPath, args...)
|
cmd := exec.CommandContext(ctx, setting.AppPath, args...)
|
||||||
cmd.Env = append(
|
cmd.Env = append(
|
||||||
os.Environ(),
|
os.Environ(),
|
||||||
"SSH_ORIGINAL_COMMAND="+command,
|
"SSH_ORIGINAL_COMMAND="+command,
|
||||||
"SKIP_MINWINSVC=1",
|
"SKIP_MINWINSVC=1",
|
||||||
|
"GIT_PROTOCOL="+gitProtocol,
|
||||||
)
|
)
|
||||||
|
|
||||||
stdout, err := cmd.StdoutPipe()
|
stdout, err := cmd.StdoutPipe()
|
||||||
|
Loading…
Reference in New Issue
Block a user