From 1a81d0b2a4fc4375c9c612be677133e441a42af9 Mon Sep 17 00:00:00 2001 From: Lyon Date: Thu, 30 Sep 2021 22:24:12 +0800 Subject: [PATCH] adding process for clone --- pikascript-packageManager-go/main.go | 93 +++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 3 deletions(-) diff --git a/pikascript-packageManager-go/main.go b/pikascript-packageManager-go/main.go index 3d3f9ee88..a4493d6c4 100644 --- a/pikascript-packageManager-go/main.go +++ b/pikascript-packageManager-go/main.go @@ -2,12 +2,73 @@ package main import ( "fmt" + "io/ioutil" "os" + "path/filepath" + "sync" "time" "github.com/go-git/go-git/v5" ) +var waitGroup sync.WaitGroup +var ch = make(chan struct{}, 255) +var isShowSize = false + +func dirents(path string) ([]os.FileInfo, bool) { + entries, err := ioutil.ReadDir(path) + if err != nil { + return nil, false + } + return entries, true +} + +//递归计算目录下所有文件 +func walkDir(path string, fileSize chan<- int64) { + defer waitGroup.Done() + ch <- struct{}{} //限制并发量 + entries, ok := dirents(path) + <-ch + if !ok { + return + } + for _, e := range entries { + if e.IsDir() { + waitGroup.Add(1) + go walkDir(filepath.Join(path, e.Name()), fileSize) + } else { + fileSize <- e.Size() + } + } +} + +func all_file(dir_path string) { + + //文件大小chennel + fileSize := make(chan int64) + //文件总大小 + var sizeCount int64 + //文件数目 + var fileCount int + + //计算目录下所有文件占的大小总和 + waitGroup.Add(1) + go walkDir(dir_path, fileSize) + + go func() { + defer close(fileSize) + waitGroup.Wait() + }() + + for size := range fileSize { + fileCount++ + sizeCount += size + } + + fmt.Printf("recived:\n") + fmt.Printf("%fM, %d\n", float64(sizeCount)/1024/1024, fileCount) +} + func PathExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { @@ -19,8 +80,23 @@ func PathExists(path string) (bool, error) { return false, err } -func main() { - path := "/tmp/pikascript" +func readFolderSize(path string) { + // t := time.Now() + dir_path := path + //all_file(dir_path) + + for { + if !isShowSize { + continue + } + all_file(dir_path) + time.Sleep(time.Second) + } + + // fmt.Println("花费的时间为 " + time.Since(t).String()) +} + +func updatePikascript(path string) { pathExist, err := PathExists(path) if err != nil { fmt.Printf("PathExists(%s),err(%v)\n", path, err) @@ -31,8 +107,9 @@ func main() { fmt.Printf("downloading pikascript to %s...\n", path) fmt.Printf("need about 10 min(s)\n") fmt.Printf("please wait...\n") + isShowSize = true _, err = git.PlainClone(path, false, &git.CloneOptions{ - URL: "https://github.com.cnpmjs.org/pikastech/pikascript", + URL: "https://gitee.com/lyon1998/pikascript", Progress: os.Stdout, }) if nil != err { @@ -49,9 +126,19 @@ func main() { commit, _ := r.CommitObject(ref.Hash()) fmt.Println(commit) + isShowSize = false fmt.Println("update OK !") for i := 3; i >= 0; i-- { time.Sleep(1 * time.Second) fmt.Println("this window will auto close after", i, "s...") } } + +func main() { + superPath := "/tmp" + path := "/pikascript" + + go readFolderSize(superPath + path) + + updatePikascript(superPath + path) +}