mirror of
https://github.com/Pull-Pal/pull-pal.git
synced 2024-10-17 16:23:44 -04:00
3aa79401d0
* 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"
66 lines
2.3 KiB
Go
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
|
|
}
|