aboutsummaryrefslogtreecommitdiff
path: root/internal/git2c
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-04-06 09:26:46 +0800
committerRunxi Yu <me@runxiyu.org>2025-04-06 09:27:53 +0800
commitda1d8f4e7c332c7109427915e6459b10209cedce (patch)
tree280b921be3b51f93d82d916b4eaa89387b7102cc /internal/git2c
parentgit2c, git2d: Rename cmd1 and cmd2 descriptively (diff)
downloadforge-0.1.32.tar.gz
forge-0.1.32.tar.zst
forge-0.1.32.zip
Move the Go stuff to ./forged/v0.1.32
Diffstat (limited to 'internal/git2c')
-rw-r--r--internal/git2c/client.go43
-rw-r--r--internal/git2c/cmd_index.go63
-rw-r--r--internal/git2c/cmd_treeraw.go92
-rw-r--r--internal/git2c/git_types.go25
4 files changed, 0 insertions, 223 deletions
diff --git a/internal/git2c/client.go b/internal/git2c/client.go
deleted file mode 100644
index d178c47..0000000
--- a/internal/git2c/client.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// SPDX-License-Identifier: AGPL-3.0-only
-// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org>
-
-// Package git2c provides routines to interact with the git2d backend daemon.
-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
-}
diff --git a/internal/git2c/cmd_index.go b/internal/git2c/cmd_index.go
deleted file mode 100644
index a705a63..0000000
--- a/internal/git2c/cmd_index.go
+++ /dev/null
@@ -1,63 +0,0 @@
-// SPDX-License-Identifier: AGPL-3.0-only
-// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org>
-
-package git2c
-
-import (
- "encoding/hex"
- "errors"
- "fmt"
- "io"
-)
-
-func (c *Client) CmdIndex(repoPath string) ([]Commit, *FilenameContents, error) {
- if err := c.writer.WriteData([]byte(repoPath)); err != nil {
- return nil, nil, fmt.Errorf("sending repo path failed: %w", err)
- }
- if err := c.writer.WriteUint(1); err != nil {
- return nil, nil, fmt.Errorf("sending command failed: %w", err)
- }
-
- status, err := c.reader.ReadUint()
- if err != nil {
- return nil, nil, fmt.Errorf("reading status failed: %w", err)
- }
- if status != 0 {
- return nil, nil, fmt.Errorf("git2d error: %d", status)
- }
-
- // README
- readmeRaw, err := c.reader.ReadData()
- if err != nil {
- readmeRaw = nil
- }
-
- readmeFilename := "README.md" // TODO
- readme := &FilenameContents{Filename: readmeFilename, Content: readmeRaw}
-
- // Commits
- var commits []Commit
- for {
- id, err := c.reader.ReadData()
- if err != nil {
- if errors.Is(err, io.EOF) {
- break
- }
- return nil, nil, fmt.Errorf("reading commit ID failed: %w", err)
- }
- title, _ := c.reader.ReadData()
- authorName, _ := c.reader.ReadData()
- authorEmail, _ := c.reader.ReadData()
- authorDate, _ := c.reader.ReadData()
-
- commits = append(commits, Commit{
- Hash: hex.EncodeToString(id),
- Author: string(authorName),
- Email: string(authorEmail),
- Date: string(authorDate),
- Message: string(title),
- })
- }
-
- return commits, readme, nil
-}
diff --git a/internal/git2c/cmd_treeraw.go b/internal/git2c/cmd_treeraw.go
deleted file mode 100644
index c93480a..0000000
--- a/internal/git2c/cmd_treeraw.go
+++ /dev/null
@@ -1,92 +0,0 @@
-// SPDX-License-Identifier: AGPL-3.0-only
-// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org>
-
-package git2c
-
-import (
- "errors"
- "fmt"
- "io"
-)
-
-func (c *Client) CmdTreeRaw(repoPath, pathSpec string) ([]TreeEntry, string, error) {
- if err := c.writer.WriteData([]byte(repoPath)); err != nil {
- return nil, "", fmt.Errorf("sending repo path failed: %w", err)
- }
- if err := c.writer.WriteUint(2); err != nil {
- return nil, "", fmt.Errorf("sending command failed: %w", err)
- }
- if err := c.writer.WriteData([]byte(pathSpec)); err != nil {
- return nil, "", fmt.Errorf("sending path failed: %w", err)
- }
-
- status, err := c.reader.ReadUint()
- if err != nil {
- return nil, "", fmt.Errorf("reading status failed: %w", err)
- }
-
- switch status {
- case 0:
- kind, err := c.reader.ReadUint()
- if err != nil {
- return nil, "", fmt.Errorf("reading object kind failed: %w", err)
- }
-
- switch kind {
- case 1:
- // Tree
- count, err := c.reader.ReadUint()
- if err != nil {
- return nil, "", fmt.Errorf("reading entry count failed: %w", err)
- }
-
- var files []TreeEntry
- for range count {
- typeCode, err := c.reader.ReadUint()
- if err != nil {
- return nil, "", fmt.Errorf("error reading entry type: %w", err)
- }
- mode, err := c.reader.ReadUint()
- if err != nil {
- return nil, "", fmt.Errorf("error reading entry mode: %w", err)
- }
- size, err := c.reader.ReadUint()
- if err != nil {
- return nil, "", fmt.Errorf("error reading entry size: %w", err)
- }
- name, err := c.reader.ReadData()
- if err != nil {
- return nil, "", fmt.Errorf("error reading entry name: %w", err)
- }
-
- files = append(files, TreeEntry{
- Name: string(name),
- Mode: fmt.Sprintf("%06o", mode),
- Size: size,
- IsFile: typeCode == 2,
- IsSubtree: typeCode == 1,
- })
- }
-
- return files, "", nil
-
- case 2:
- // Blob
- content, err := c.reader.ReadData()
- if err != nil && !errors.Is(err, io.EOF) {
- return nil, "", fmt.Errorf("error reading file content: %w", err)
- }
-
- return nil, string(content), nil
-
- default:
- return nil, "", fmt.Errorf("unknown kind: %d", kind)
- }
-
- case 3:
- return nil, "", fmt.Errorf("path not found: %s", pathSpec)
-
- default:
- return nil, "", fmt.Errorf("unknown status code: %d", status)
- }
-}
diff --git a/internal/git2c/git_types.go b/internal/git2c/git_types.go
deleted file mode 100644
index da685bf..0000000
--- a/internal/git2c/git_types.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// SPDX-License-Identifier: AGPL-3.0-only
-// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org>
-
-package git2c
-
-type Commit struct {
- Hash string
- Author string
- Email string
- Date string
- Message string
-}
-
-type FilenameContents struct {
- Filename string
- Content []byte
-}
-
-type TreeEntry struct {
- Name string
- Mode string
- Size uint64
- IsFile bool
- IsSubtree bool
-}