mirror of
https://github.com/Pull-Pal/pull-pal.git
synced 2024-11-03 01:38:33 -04:00
b9b0b9cf12
Implement cobra and stuff Right now there is just one root command You can set a config file, or pass flags in via CLI Haven't figured out how to use env variables yet But if you run the root command, It'll check the repo for issues, and generate an LLM prompt You can copy-paste it to the LLM chat, then copy-paste the response to a different file Then press enter in the CLI tool, and it will parse the response and open a PR with the change
64 lines
2.3 KiB
Go
64 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
|
|
}
|