24 lines
605 B
Go
24 lines
605 B
Go
package platform
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
// GitClient wraps `git` via a Runner.
|
|
type GitClient struct{ Runner Runner }
|
|
|
|
// Clone always runs `git clone --depth=1 url dest`.
|
|
func (g GitClient) Clone(ctx context.Context, url, dest string) error {
|
|
return g.Runner.Run(ctx, "git", "clone", "--depth=1", url, dest)
|
|
}
|
|
|
|
// EnsureRepo clones url into dest if dest/.git is missing; otherwise noop.
|
|
func (g GitClient) EnsureRepo(ctx context.Context, url, dest string) error {
|
|
if _, err := os.Stat(filepath.Join(dest, ".git")); err == nil {
|
|
return nil
|
|
}
|
|
return g.Clone(ctx, url, dest)
|
|
}
|