2625414fbf9cd3a9020e3e26b1f35fa07079101c

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

fix(server): use canonical repos dir

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