aboutsummaryrefslogtreecommitdiff
path: root/internal/git2c/client.go
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-04-05 21:27:17 +0800
committerRunxi Yu <me@runxiyu.org>2025-04-05 21:27:17 +0800
commite0635b47c2f30719e1ea026812af85c988632c0e (patch)
treef112904c018dc294cf6f902423745f1f1932449c /internal/git2c/client.go
parentExport symbols from database.go (diff)
downloadforge-e0635b47c2f30719e1ea026812af85c988632c0e.tar.gz
forge-e0635b47c2f30719e1ea026812af85c988632c0e.tar.zst
forge-e0635b47c2f30719e1ea026812af85c988632c0e.zip
Move things to internal/v0.1.23
Diffstat (limited to 'internal/git2c/client.go')
-rw-r--r--internal/git2c/client.go39
1 files changed, 39 insertions, 0 deletions
diff --git a/internal/git2c/client.go b/internal/git2c/client.go
new file mode 100644
index 0000000..c4c3ab4
--- /dev/null
+++ b/internal/git2c/client.go
@@ -0,0 +1,39 @@
+package git2c
+
+import (
+ "fmt"
+ "net"
+
+ "git.sr.ht/~sircmpwn/go-bare"
+)
+
+type Client struct {
+ SocketPath string
+ conn net.Conn
+ writer *bare.Writer
+ reader *bare.Reader
+}
+
+func NewClient(socketPath string) (*Client, error) {
+ conn, err := net.Dial("unix", socketPath)
+ if err != nil {
+ return nil, fmt.Errorf("git2d connection failed: %w", err)
+ }
+
+ writer := bare.NewWriter(conn)
+ reader := bare.NewReader(conn)
+
+ return &Client{
+ SocketPath: socketPath,
+ conn: conn,
+ writer: writer,
+ reader: reader,
+ }, nil
+}
+
+func (c *Client) Close() error {
+ if c.conn != nil {
+ return c.conn.Close()
+ }
+ return nil
+}