aboutsummaryrefslogtreecommitdiff
path: root/git2c
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 /git2c
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 'git2c')
-rw-r--r--git2c/client.go39
-rw-r--r--git2c/cmd1.go60
-rw-r--r--git2c/cmd2.go89
-rw-r--r--git2c/git_types.go22
4 files changed, 0 insertions, 210 deletions
diff --git a/git2c/client.go b/git2c/client.go
deleted file mode 100644
index c4c3ab4..0000000
--- a/git2c/client.go
+++ /dev/null
@@ -1,39 +0,0 @@
-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/git2c/cmd1.go b/git2c/cmd1.go
deleted file mode 100644
index ba59b5a..0000000
--- a/git2c/cmd1.go
+++ /dev/null
@@ -1,60 +0,0 @@
-package git2c
-
-import (
- "encoding/hex"
- "errors"
- "fmt"
- "io"
-)
-
-func (c *Client) Cmd1(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/git2c/cmd2.go b/git2c/cmd2.go
deleted file mode 100644
index c688dd2..0000000
--- a/git2c/cmd2.go
+++ /dev/null
@@ -1,89 +0,0 @@
-package git2c
-
-import (
- "errors"
- "fmt"
- "io"
-)
-
-func (c *Client) Cmd2(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/git2c/git_types.go b/git2c/git_types.go
deleted file mode 100644
index da90db6..0000000
--- a/git2c/git_types.go
+++ /dev/null
@@ -1,22 +0,0 @@
-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
-}