diff options
Diffstat (limited to 'examples/clone')
-rw-r--r-- | examples/clone/main.go | 73 |
1 files changed, 11 insertions, 62 deletions
diff --git a/examples/clone/main.go b/examples/clone/main.go index 0fa5fe6..13257ca 100644 --- a/examples/clone/main.go +++ b/examples/clone/main.go @@ -2,87 +2,36 @@ package main import ( "fmt" - "io" "os" - "path/filepath" - - "github.com/fatih/color" "gopkg.in/src-d/go-git.v4" + . "gopkg.in/src-d/go-git.v4/examples" ) func main() { - checkArgs() + CheckArgs("<url>", "<directory>") url := os.Args[1] directory := os.Args[2] r, err := git.NewFilesystemRepository(directory) - checkIfError(err) + CheckIfError(err) - // Clone the given repository, using depth we create a shallow clone : - // > git clone <url> --depth 1 - color.Blue("git clone %s --depth 1 %s", url, directory) + // Clone the given repository to the given directory + Info("git clone %s %s", url, directory) err = r.Clone(&git.CloneOptions{ - URL: url, + URL: url, + Depth: 1, }) - checkIfError(err) + + CheckIfError(err) // ... retrieving the branch being pointed by HEAD ref, err := r.Head() - checkIfError(err) + CheckIfError(err) // ... retrieving the commit object commit, err := r.Commit(ref.Hash()) - checkIfError(err) + CheckIfError(err) fmt.Println(commit) - os.Exit(0) - - // ... we get all the files from the commit - files, err := commit.Files() - checkIfError(err) - - // ... now we iterate the files to save to disk - err = files.ForEach(func(f *git.File) error { - abs := filepath.Join(directory, f.Name) - dir := filepath.Dir(abs) - - os.MkdirAll(dir, 0777) - file, err := os.Create(abs) - if err != nil { - return err - } - - defer file.Close() - r, err := f.Reader() - if err != nil { - return err - } - - defer r.Close() - - if err := file.Chmod(f.Mode); err != nil { - return err - } - - _, err = io.Copy(file, r) - return err - }) - checkIfError(err) -} - -func checkIfError(err error) { - if err == nil { - return - } - - color.Red("error: %s", err) - os.Exit(1) -} - -func checkArgs() { - if len(os.Args) < 3 { - color.Cyan("Usage: %s <url> <directory>", os.Args[0]) - os.Exit(1) - } } |