Răsfoiți Sursa

Auto stash before merge of "develop" and "origin/develop"

Wilfried Klaas 5 ani în urmă
părinte
comite
7be2de32aa
2 a modificat fișierele cu 51 adăugiri și 19 ștergeri
  1. 49 17
      GoHash.go
  2. 2 2
      build.cmd

+ 49 - 17
GoHash.go

@@ -17,7 +17,6 @@ import (
 
 // Fdhashes struct for holding all informations about one folder.
 type Fdhashes struct {
-	Path   string
 	Hashes map[string]string
 }
 
@@ -25,6 +24,13 @@ var hashes map[string]Fdhashes
 
 var wg sync.WaitGroup
 var mu sync.RWMutex
+var driveLetter string
+
+var rewrite bool
+
+func init() {
+	flag.BoolVar(&rewrite, "rewrite", false, "rewrite all fhhashes files.")
+}
 
 func main() {
 	log.Println("starting GoHash")
@@ -38,9 +44,13 @@ func main() {
 	}
 	if file.IsDir() {
 		log.Println("start with folder:", myFile)
+		driveLetter = ""
+		if runtime.GOOS == "windows" {
+			driveLetter = filepath.VolumeName(myFile) + "/"
+		}
 		processFolder(myFile)
 	} else {
-		log.Printf("file %s has hash %s\n", myFile, getHash(myFile))
+		log.Printf("file %s has hash %s\n", myFile, getSha256Hash(myFile))
 	}
 
 	fmt.Println("waiting")
@@ -48,7 +58,7 @@ func main() {
 	log.Println("done")
 }
 
-func getHash(fileStr string) string {
+func getSha256Hash(fileStr string) string {
 	f, err := os.Open(fileStr)
 	if err != nil {
 		log.Fatal(err)
@@ -66,7 +76,6 @@ func outputHash(fileStr string) {
 	var hashFile Fdhashes
 	doHash := true
 	defer wg.Done()
-	fmt.Print(".")
 	dir, fileName := filepath.Split(fileStr)
 	if fileName == ".fdhashes3" {
 		return
@@ -76,12 +85,12 @@ func outputHash(fileStr string) {
 	if !ok {
 		_, err := os.Stat(dir + ".fdhashes3")
 		if os.IsNotExist(err) {
-			hashFile = Fdhashes{Path: dir, Hashes: make(map[string]string)}
+			hashFile = Fdhashes{Hashes: make(map[string]string)}
 		} else {
 			hashFile = loadHashfile(dir + ".fdhashes3")
 		}
 		hashes[dir] = hashFile
-		saveHashfile(hashFile)
+		saveHashfile(hashFile, dir)
 	}
 
 	_, ok = hashFile.Hashes[fileName]
@@ -89,20 +98,36 @@ func outputHash(fileStr string) {
 	hashFile = hashes[dir]
 	mu.Unlock()
 	if doHash {
-		hash := getHash(fileStr)
+		hash := getSha256Hash(fileStr)
 		mu.Lock()
 		hashFile.Hashes[fileName] = hash
-		saveHashfile(hashFile)
+		saveHashfile(hashFile, dir)
 		mu.Unlock()
-		log.Printf("file %s has hash %s\n", fileStr, hash)
+		log.Printf("file \"%s\" has hash \"%s\"\n", fileStr, hash)
 	}
 }
 
+var count int
+
 func processFolder(folder string) {
+	count = 0
 	err := filepath.Walk(folder, func(path string, info os.FileInfo, err error) error {
-		if !info.IsDir() {
-			wg.Add(1)
-			go outputHash(path)
+		count++
+		if (count % 100) == 0 {
+			fmt.Print(".")
+		}
+		if (count % 10000) == 0 {
+			fmt.Println()
+		}
+		filename := info.Name()
+		if filename[0:1] != "." {
+			if info.IsDir() {
+				fmt.Println(path)
+			}
+			if !info.IsDir() {
+				wg.Add(1)
+				go outputHash(path)
+			}
 		}
 		return nil
 	})
@@ -111,22 +136,29 @@ func processFolder(folder string) {
 	}
 }
 
-func saveHashfile(hashFile Fdhashes) {
+func saveHashfile(hashFile Fdhashes, dir string) {
 	b, err := json.Marshal(hashFile)
 	if err != nil {
 		fmt.Println(err)
 		return
 	}
-	err = ioutil.WriteFile(hashFile.Path+".fdhashes3", b, 0644)
+	err = ioutil.WriteFile(dir+".fdhashes3", b, 0644)
 	if err != nil {
 		panic(err)
 	}
 }
 
 func loadHashfile(filename string) Fdhashes {
-	file, err := ioutil.ReadFile(filename)
-	if err != nil {
-		panic(err)
+	data := Fdhashes{Hashes: make(map[string]string)}
+	if !rewrite {
+		file, err := ioutil.ReadFile(filename)
+		if err != nil {
+			panic(err)
+		}
+		err = json.Unmarshal([]byte(file), &data)
+		if err != nil {
+			panic(err)
+		}
 	}
 	data := Fdhashes{}
 	err = json.Unmarshal([]byte(file), &data)

+ 2 - 2
build.cmd

@@ -1,3 +1,3 @@
-@echo off
 set GOPATH=%cd%
-go build 
+go build -ldflags="-s -w" 
+copy GoHash.exe f:\