Diff
1diff --git a/server/backend/file/file.go b/server/backend/file/file.go
2index 05949556bb186e35b05fe5e7e144b37fb46a5eb0..84d2f2db5e605ed873eeff54cddd7b9229284494 100644
3--- a/server/backend/file/file.go
4+++ b/server/backend/file/file.go
5@@ -80,6 +80,11 @@ func (fb *FileBackend) reposPath() string {
6 return filepath.Join(fb.path, repos)
7 }
8
9+// RepositoryStorePath returns the path to the repository store.
10+func (fb *FileBackend) RepositoryStorePath() string {
11+ return fb.reposPath()
12+}
13+
14 func (fb *FileBackend) settingsPath() string {
15 return filepath.Join(fb.path, settings)
16 }
17diff --git a/server/backend/repo.go b/server/backend/repo.go
18index d9238ae762438130e9260e421112b086a0bc3b8e..6cf46c807e7ca42bb0a0deeb32e1a786715a0e8a 100644
19--- a/server/backend/repo.go
20+++ b/server/backend/repo.go
21@@ -11,6 +11,8 @@ type RepositoryStore interface {
22 Repository(repo string) (Repository, error)
23 // Repositories returns a list of all repositories.
24 Repositories() ([]Repository, error)
25+ // RepositoryStorePath returns the path to the repository store.
26+ RepositoryStorePath() string
27 // CreateRepository creates a new repository.
28 CreateRepository(name string, private bool) (Repository, error)
29 // DeleteRepository deletes a repository.
30diff --git a/server/daemon.go b/server/daemon.go
31index 34600792da6c289c3cb860d30849a07bf73093b7..d1f0c438724dabc7b7dc04acc4261a2761d85907 100644
32--- a/server/daemon.go
33+++ b/server/daemon.go
34@@ -207,8 +207,7 @@ func (d *GitDaemon) handleClient(conn net.Conn) {
35 // git bare repositories should end in ".git"
36 // https://git-scm.com/docs/gitrepository-layout
37 repo := name + ".git"
38- // FIXME: determine repositories path
39- reposDir := filepath.Join(d.cfg.DataPath, "repos")
40+ reposDir := d.cfg.Backend.RepositoryStorePath()
41 if err := ensureWithin(reposDir, repo); err != nil {
42 fatal(c, err)
43 return
44diff --git a/server/git/daemon/conn.go b/server/git/daemon/conn.go
45deleted file mode 100644
46index 1ab35242405bc4c2cad2673eec3091cead55213f..0000000000000000000000000000000000000000
47--- a/server/git/daemon/conn.go
48+++ /dev/null
49@@ -1,55 +0,0 @@
50-package daemon
51-
52-import (
53- "context"
54- "net"
55- "time"
56-)
57-
58-type serverConn struct {
59- net.Conn
60-
61- idleTimeout time.Duration
62- maxDeadline time.Time
63- closeCanceler context.CancelFunc
64-}
65-
66-func (c *serverConn) Write(p []byte) (n int, err error) {
67- c.updateDeadline()
68- n, err = c.Conn.Write(p)
69- if _, isNetErr := err.(net.Error); isNetErr && c.closeCanceler != nil {
70- c.closeCanceler()
71- }
72- return
73-}
74-
75-func (c *serverConn) Read(b []byte) (n int, err error) {
76- c.updateDeadline()
77- n, err = c.Conn.Read(b)
78- if _, isNetErr := err.(net.Error); isNetErr && c.closeCanceler != nil {
79- c.closeCanceler()
80- }
81- return
82-}
83-
84-func (c *serverConn) Close() (err error) {
85- err = c.Conn.Close()
86- if c.closeCanceler != nil {
87- c.closeCanceler()
88- }
89- return
90-}
91-
92-func (c *serverConn) updateDeadline() {
93- switch {
94- case c.idleTimeout > 0:
95- idleDeadline := time.Now().Add(c.idleTimeout)
96- if idleDeadline.Unix() < c.maxDeadline.Unix() || c.maxDeadline.IsZero() {
97- c.Conn.SetDeadline(idleDeadline)
98- return
99- }
100- fallthrough
101- default:
102- c.Conn.SetDeadline(c.maxDeadline)
103- }
104-}
105diff --git a/server/ssh.go b/server/ssh.go
106index 9ee3d0ace68c00662070b9023dd058a31e48eeee..c0f3529fd25958b3b5a827ee6a56d16542154a29 100644
107--- a/server/ssh.go
108+++ b/server/ssh.go
109@@ -94,8 +94,7 @@ func (s *SSHServer) Middleware(cfg *config.Config) wish.Middleware {
110 // https://git-scm.com/docs/gitrepository-layout
111 repo := name + ".git"
112
113- // FIXME: determine repositories path
114- reposDir := filepath.Join(cfg.DataPath, "repos")
115+ reposDir := cfg.Backend.RepositoryStorePath()
116 if err := ensureWithin(reposDir, repo); err != nil {
117 sshFatal(s, err)
118 return