diff options
author | Runxi Yu <me@runxiyu.org> | 2025-08-12 11:01:07 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-09-16 08:58:16 +0800 |
commit | c12fe030fe5935882047e75ac8a3792faea27574 (patch) | |
tree | e2b6f795410348596a7965694bed7e85511d0874 /forged/internal/git2c | |
parent | Remove forge-specific functions from misc (diff) | |
download | forge-c12fe030fe5935882047e75ac8a3792faea27574.tar.gz forge-c12fe030fe5935882047e75ac8a3792faea27574.tar.zst forge-c12fe030fe5935882047e75ac8a3792faea27574.zip |
Diffstat (limited to '')
-rw-r--r-- | forged/internal/git2c/perror.go | 48 | ||||
-rw-r--r-- | forged/internal/ipc/git2c/client.go (renamed from forged/internal/git2c/client.go) | 19 | ||||
-rw-r--r-- | forged/internal/ipc/git2c/cmd_index.go (renamed from forged/internal/git2c/cmd_index.go) | 8 | ||||
-rw-r--r-- | forged/internal/ipc/git2c/cmd_treeraw.go (renamed from forged/internal/git2c/cmd_treeraw.go) | 11 | ||||
-rw-r--r-- | forged/internal/ipc/git2c/git_types.go (renamed from forged/internal/git2c/git_types.go) | 3 |
5 files changed, 20 insertions, 69 deletions
diff --git a/forged/internal/git2c/perror.go b/forged/internal/git2c/perror.go deleted file mode 100644 index 96bffd5..0000000 --- a/forged/internal/git2c/perror.go +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only -// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org> - -// TODO: Make the C part report detailed error messages too - -package git2c - -import "errors" - -var ( - Success error - ErrUnknown = errors.New("git2c: unknown error") - ErrPath = errors.New("git2c: get tree entry by path failed") - ErrRevparse = errors.New("git2c: revparse failed") - ErrReadme = errors.New("git2c: no readme") - ErrBlobExpected = errors.New("git2c: blob expected") - ErrEntryToObject = errors.New("git2c: tree entry to object conversion failed") - ErrBlobRawContent = errors.New("git2c: get blob raw content failed") - ErrRevwalk = errors.New("git2c: revwalk failed") - ErrRevwalkPushHead = errors.New("git2c: revwalk push head failed") - ErrBareProto = errors.New("git2c: bare protocol error") -) - -func Perror(errno uint) error { - switch errno { - case 0: - return Success - case 3: - return ErrPath - case 4: - return ErrRevparse - case 5: - return ErrReadme - case 6: - return ErrBlobExpected - case 7: - return ErrEntryToObject - case 8: - return ErrBlobRawContent - case 9: - return ErrRevwalk - case 10: - return ErrRevwalkPushHead - case 11: - return ErrBareProto - } - return ErrUnknown -} diff --git a/forged/internal/git2c/client.go b/forged/internal/ipc/git2c/client.go index ed9390c..79c2024 100644 --- a/forged/internal/git2c/client.go +++ b/forged/internal/ipc/git2c/client.go @@ -1,17 +1,16 @@ // 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 ( + "context" "fmt" "net" - "go.lindenii.runxiyu.org/forge/forged/internal/bare" + "go.lindenii.runxiyu.org/forge/forged/internal/common/bare" ) -// Client represents a connection to the git2d backend daemon. type Client struct { socketPath string conn net.Conn @@ -19,9 +18,9 @@ type Client struct { reader *bare.Reader } -// NewClient establishes a connection to a git2d socket and returns a new Client. -func NewClient(socketPath string) (*Client, error) { - conn, err := net.Dial("unix", socketPath) +func NewClient(ctx context.Context, socketPath string) (*Client, error) { + dialer := &net.Dialer{} //exhaustruct:ignore + conn, err := dialer.DialContext(ctx, "unix", socketPath) if err != nil { return nil, fmt.Errorf("git2d connection failed: %w", err) } @@ -37,10 +36,12 @@ func NewClient(socketPath string) (*Client, error) { }, nil } -// Close terminates the underlying socket connection. -func (c *Client) Close() error { +func (c *Client) Close() (err error) { if c.conn != nil { - return c.conn.Close() + err = c.conn.Close() + if err != nil { + return fmt.Errorf("close underlying socket: %w", err) + } } return nil } diff --git a/forged/internal/git2c/cmd_index.go b/forged/internal/ipc/git2c/cmd_index.go index 8862b2c..44a0845 100644 --- a/forged/internal/git2c/cmd_index.go +++ b/forged/internal/ipc/git2c/cmd_index.go @@ -10,13 +10,13 @@ import ( "io" ) -// CmdIndex requests a repository index from git2d and returns the list of commits -// and the contents of a README file if available. func (c *Client) CmdIndex(repoPath string) ([]Commit, *FilenameContents, error) { - if err := c.writer.WriteData([]byte(repoPath)); err != nil { + err := c.writer.WriteData([]byte(repoPath)) + if err != nil { return nil, nil, fmt.Errorf("sending repo path failed: %w", err) } - if err := c.writer.WriteUint(1); err != nil { + err = c.writer.WriteUint(1) + if err != nil { return nil, nil, fmt.Errorf("sending command failed: %w", err) } diff --git a/forged/internal/git2c/cmd_treeraw.go b/forged/internal/ipc/git2c/cmd_treeraw.go index 492cb84..d2d5ac2 100644 --- a/forged/internal/git2c/cmd_treeraw.go +++ b/forged/internal/ipc/git2c/cmd_treeraw.go @@ -9,16 +9,17 @@ import ( "io" ) -// CmdTreeRaw queries git2d for a tree or blob object at the given path within the repository. -// It returns either a directory listing or the contents of a file. func (c *Client) CmdTreeRaw(repoPath, pathSpec string) ([]TreeEntry, string, error) { - if err := c.writer.WriteData([]byte(repoPath)); err != nil { + err := c.writer.WriteData([]byte(repoPath)) + if err != nil { return nil, "", fmt.Errorf("sending repo path failed: %w", err) } - if err := c.writer.WriteUint(2); err != nil { + err = c.writer.WriteUint(2) + if err != nil { return nil, "", fmt.Errorf("sending command failed: %w", err) } - if err := c.writer.WriteData([]byte(pathSpec)); err != nil { + err = c.writer.WriteData([]byte(pathSpec)) + if err != nil { return nil, "", fmt.Errorf("sending path failed: %w", err) } diff --git a/forged/internal/git2c/git_types.go b/forged/internal/ipc/git2c/git_types.go index bf13f05..da685bf 100644 --- a/forged/internal/git2c/git_types.go +++ b/forged/internal/ipc/git2c/git_types.go @@ -3,7 +3,6 @@ package git2c -// Commit represents a single commit object retrieved from the git2d daemon. type Commit struct { Hash string Author string @@ -12,13 +11,11 @@ type Commit struct { Message string } -// FilenameContents holds the filename and byte contents of a file, such as a README. type FilenameContents struct { Filename string Content []byte } -// TreeEntry represents a file or directory entry within a Git tree object. type TreeEntry struct { Name string Mode string |