diff options
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) | 16 | ||||
-rw-r--r-- | forged/internal/ipc/git2c/cmd_index.go (renamed from forged/internal/git2c/cmd_index.go) | 6 | ||||
-rw-r--r-- | forged/internal/ipc/git2c/cmd_treeraw.go (renamed from forged/internal/git2c/cmd_treeraw.go) | 9 | ||||
-rw-r--r-- | forged/internal/ipc/git2c/git_types.go (renamed from forged/internal/git2c/git_types.go) | 0 |
5 files changed, 20 insertions, 59 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..8b11035 100644 --- a/forged/internal/git2c/client.go +++ b/forged/internal/ipc/git2c/client.go @@ -1,14 +1,14 @@ // 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. @@ -20,8 +20,9 @@ type Client struct { } // 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) } @@ -38,9 +39,12 @@ func NewClient(socketPath string) (*Client, error) { } // 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..e9fc435 100644 --- a/forged/internal/git2c/cmd_index.go +++ b/forged/internal/ipc/git2c/cmd_index.go @@ -13,10 +13,12 @@ import ( // 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..89b702c 100644 --- a/forged/internal/git2c/cmd_treeraw.go +++ b/forged/internal/ipc/git2c/cmd_treeraw.go @@ -12,13 +12,16 @@ import ( // 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..bf13f05 100644 --- a/forged/internal/git2c/git_types.go +++ b/forged/internal/ipc/git2c/git_types.go |