complete git checkout
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
4
clean.go
4
clean.go
@@ -6,6 +6,8 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/unistack-org/micro/v3/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
func isGenerated(name string) bool {
|
func isGenerated(name string) bool {
|
||||||
@@ -40,9 +42,11 @@ func cleanDir(dir string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if dir == "vendor" {
|
if dir == "vendor" {
|
||||||
|
logger.Info("skip vendor dir")
|
||||||
return filepath.SkipDir
|
return filepath.SkipDir
|
||||||
}
|
}
|
||||||
if isGenerated(path) {
|
if isGenerated(path) {
|
||||||
|
logger.Infof("remove generated file: %s", path)
|
||||||
err = os.Remove(path)
|
err = os.Remove(path)
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
|
46
copy.go
Normal file
46
copy.go
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"github.com/go-git/go-git/v5/plumbing/object"
|
||||||
|
"github.com/unistack-org/micro/v3/logger"
|
||||||
|
)
|
||||||
|
|
||||||
|
func writeFile(file *object.File, dir string, flag int, mode os.FileMode) error {
|
||||||
|
path := filepath.Join(dir, file.Name)
|
||||||
|
|
||||||
|
if err := os.MkdirAll(filepath.Dir(path), os.FileMode(0755)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
w, err := os.OpenFile(path, flag, mode)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if err := w.Close(); err != nil {
|
||||||
|
logger.Errorf("failed to close file: %v", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
r, err := file.Reader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if err := r.Close(); err != nil {
|
||||||
|
logger.Errorf("failed to close file: %v", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
if _, err = io.Copy(w, r); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
28
main.go
28
main.go
@@ -6,23 +6,23 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"go/types"
|
"go/types"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/go-git/go-git/v5"
|
"github.com/go-git/go-git/v5"
|
||||||
|
"github.com/go-git/go-git/v5/plumbing/filemode"
|
||||||
"github.com/go-git/go-git/v5/plumbing/object"
|
"github.com/go-git/go-git/v5/plumbing/object"
|
||||||
"github.com/go-git/go-git/v5/storage/memory"
|
"github.com/go-git/go-git/v5/storage/memory"
|
||||||
"github.com/unistack-org/micro/v3/logger"
|
"github.com/unistack-org/micro/v3/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
flagDir string
|
flagDir string
|
||||||
flagUrl string
|
flagUrl string
|
||||||
flagForce bool
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
flag.StringVar(&flagDir, "dstdir", "", "place for generated files")
|
flag.StringVar(&flagDir, "dstdir", "", "place for generated files")
|
||||||
flag.StringVar(&flagUrl, "url", "", "repo url path")
|
flag.StringVar(&flagUrl, "url", "", "repo url path")
|
||||||
flag.BoolVar(&flagForce, "force", false, "owerwrite files")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -82,9 +82,25 @@ func main() {
|
|||||||
|
|
||||||
err = tree.Files().ForEach(func(file *object.File) error {
|
err = tree.Files().ForEach(func(file *object.File) error {
|
||||||
if file == nil {
|
if file == nil {
|
||||||
return types.Error{Msg: "File pointer is empty"}
|
return types.Error{Msg: "file pointer is empty"}
|
||||||
}
|
}
|
||||||
fmt.Printf("%#+v\n", file)
|
|
||||||
|
fmode, err := file.Mode.ToOSFileMode()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch file.Mode {
|
||||||
|
case filemode.Executable:
|
||||||
|
return writeFile(file, flagDir, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, fmode)
|
||||||
|
case filemode.Dir:
|
||||||
|
return os.MkdirAll(filepath.Join(flagDir, file.Name), fmode)
|
||||||
|
case filemode.Regular:
|
||||||
|
return writeFile(file, flagDir, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, fmode)
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported filetype %v for %s", file.Mode, file.Name)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user