pull-pal/vc/common.go
Moby von Briesen 3aa79401d0 Implement "local repo" functionality in github client
* Retrieving the current state (i.e. contents) of file at path in local
  repo
* Starting a commit
* Updating the contents (or creating) file at path in local repo and
  updating the "started" commit
* Finishing a commit
* Pushing commit to new remote branch (as part of creating a PR)
* Removing local repository on "shutdown"
2023-04-22 16:59:59 -04:00

66 lines
2.3 KiB
Go

package vc
import (
"fmt"
"github.com/mobyvb/pull-pal/llm"
"github.com/go-git/go-git/v5"
)
// Issue represents an issue on a version control server.
type Issue struct {
ID string
Subject string
Body string
URL string
Author Author
}
// Author represents a commit, issue, or code change request author on a version control server.
type Author struct {
Email string
Handle string
Token string
}
// Repository represents a version control repository and its local path.
type Repository struct {
LocalPath string
HostDomain string
Name string
Owner Author
localRepo *git.Repository
}
// SSH returns the SSH connection string for the repository.
func (repo Repository) SSH() string {
return fmt.Sprintf("git%s:%s/%s.git", repo.HostDomain, repo.Owner.Handle, repo.Name)
}
// HTTPS returns the HTTPS representation of the remote repository.
func (repo Repository) HTTPS() string {
return fmt.Sprintf("https://%s/%s/%s.git", repo.HostDomain, repo.Owner.Handle, repo.Name)
}
// VCClient is an interface for version control server's client, e.g. a Github or Gerrit client.
type VCClient interface {
// ListOpenIssues lists unresolved issues on the version control server.
ListOpenIssues() ([]Issue, error)
// OpenCodeChangeRequest opens a new "code change request" on the version control server (e.g. "pull request" in Github).
OpenCodeChangeRequest(req llm.CodeChangeRequest, res llm.CodeChangeResponse) (id, url string, err error)
// UpdateCodeChangeRequest updates an existing code change request on the version control server.
// UpdateCodeChangeRequest(id string, res llm.CodeChangeResponse)
// TODO: add/read comments to/from issues and code change requests
// GetLocalFile gets the current representation of the file at the provided path from the local git repo.
GetLocalFile(path string) (llm.File, error)
// StartCommit initiates a commit process, after which files can be modified and added to the commit.
StartCommit() error
// ReplaceOrAddLocalFile updates or adds a file in the locally cloned repo, and applies these changes to the current git worktree.
ReplaceOrAddLocalFile(newFile llm.File) error
// FinishCommit completes a commit, after which a code change request can be opened or updated.
FinishCommit(message string) error
// Close tears down the VCClient.
Close() error
}