mirror of
https://github.com/grdl/git-get.git
synced 2026-02-05 17:08:49 +00:00
* Fix typo in readme * Reimplement all git methods without go-git * Rename repo pkg to git, add gitconfig methods * Improve tests for configuration reading * Rename package file to io and move RepoFinder there * Refactor printers - Remove smart printer - Decouple printers from git repos with interfaces - Update printer functions - Remove unnecessary flags - Add better remote URL detection * Update readme and go.mod * Add author to git commit in tests Otherwise tests will fail in CI. * Install git before running tests and don't use cgo * Add better error message, revert installing git * Ensure commit message is in quotes * Set up git config before running tests
48 lines
1.0 KiB
Go
48 lines
1.0 KiB
Go
package print
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
// DumpRepo is a git repository printable into a dump file.
|
|
type DumpRepo interface {
|
|
Path() string
|
|
Remote() (string, error)
|
|
CurrentBranch() (string, error)
|
|
}
|
|
|
|
// DumpPrinter prints a list of repos in a dump file format.
|
|
type DumpPrinter struct{}
|
|
|
|
// NewDumpPrinter creates a DumpPrinter.
|
|
func NewDumpPrinter() *DumpPrinter {
|
|
return &DumpPrinter{}
|
|
}
|
|
|
|
// Print generates a list of repos URLs. Each line contains a URL and, if applicable, a currently checked out branch name.
|
|
// It's a way to dump all repositories managed by git-get and is supposed to be consumed by `git get --dump`.
|
|
func (p *DumpPrinter) Print(repos []DumpRepo) string {
|
|
var str strings.Builder
|
|
|
|
for i, r := range repos {
|
|
url, err := r.Remote()
|
|
if err != nil {
|
|
continue
|
|
// TODO: handle error?
|
|
}
|
|
|
|
str.WriteString(url)
|
|
|
|
current, err := r.CurrentBranch()
|
|
if err != nil || current != detached {
|
|
str.WriteString(" " + current)
|
|
}
|
|
|
|
if i < len(repos)-1 {
|
|
str.WriteString("\n")
|
|
}
|
|
}
|
|
|
|
return str.String()
|
|
}
|