11package main
22
33import (
4- "crypto/sha1 "
4+ "crypto/sha256 "
55 "encoding/hex"
66 "fmt"
77 "github.com/littlecxm/kcheck/configs"
@@ -17,7 +17,9 @@ import (
1717)
1818
1919func commandHandler (c * cli.Context ) error {
20- fmt .Sprintf ("makecheck %s %s (built: %s)" , version , commitID , buildDate )
20+ builtVer := fmt .Sprintf ("makecheck %s %s (built: %s)" , version , commitID , buildDate )
21+ fmt .Println (builtVer )
22+ fmt .Println ("--------" )
2123
2224 if c .NArg () == 0 {
2325 cli .ShowAppHelpAndExit (c , 0 )
@@ -26,56 +28,91 @@ func commandHandler(c *cli.Context) error {
2628 srcDir = c .Args ().Get (0 )
2729 }
2830
29- h := sha1 .New ()
3031 var kcheckList configs.KCheckList
3132 res := make (chan * reporter.CheckResult , 999 )
3233
3334 go reporter .Handler ("failed_make.list" , res )
3435
36+ kcheckList .CreatedAt = time .Now ().Unix ()
37+ kcheckList .Version = builtVer
38+
39+ // file walk
40+ var fCount , passCount , failCount = 0 , 0 , 0
3541 err := filepath .Walk (srcDir , func (filePath string , fi os.FileInfo , err error ) error {
3642 if err != nil {
43+ failCount ++
3744 return err
3845 }
39- if strings . Contains ( strings . ToLower ( fi . Name ()), ".ds_store" ) {
46+ if utils . CheckPathBlacklist ( filePath ) {
4047 return nil
4148 }
4249 srcPath := filepath .ToSlash (strings .TrimPrefix (strings .TrimPrefix (filePath , srcDir ), string (filepath .Separator )))
50+ absPath := filepath .Join (srcDir , srcPath )
4351 if ! fi .Mode ().IsRegular () {
4452 return nil
4553 }
46- f , err := os .Open (filePath )
47- _ , err = io .Copy (h , f )
54+ fCount ++
55+
56+ f , err := os .Open (absPath )
4857 if err != nil {
58+ failCount ++
59+ return err
60+ }
61+ defer f .Close ()
62+
63+ h := sha256 .New ()
64+ if _ , err := io .Copy (h , f ); err != nil {
4965 res <- & reporter.CheckResult {
5066 Error : err ,
5167 Path : srcPath ,
5268 }
69+ failCount ++
5370 utils .PrintStatus (false , srcPath )
5471 return err
5572 } else {
73+ passCount ++
5674 utils .PrintStatus (true , srcPath )
5775 }
58- kcheckList .Files = append (kcheckList .Files , configs.KCheckFiles {Path : srcPath , SHA1 : hex .EncodeToString (h .Sum (nil )), Size : fi .Size ()})
76+ kcheckList .Files = append (kcheckList .Files ,
77+ configs.KCheckFiles {
78+ Path : srcPath ,
79+ SHA256 : hex .EncodeToString (h .Sum (nil )),
80+ Size : fi .Size (),
81+ },
82+ )
5983 f .Close ()
6084 return nil
6185 })
6286 if err != nil {
6387 log .Fatalln ("filepath err:" , err )
6488 }
89+
90+ // save list
6591 var outBytes []byte
6692 if isIndent {
67- outBytes , err = json .Marshal (kcheckList )
68- } else {
6993 outBytes , err = json .MarshalIndent (kcheckList , "" , " " )
94+ } else {
95+ outBytes , err = json .Marshal (kcheckList )
7096 }
7197 err = os .WriteFile (filepath .Join (configs .WorkDir , outFilename ), outBytes , os .ModePerm )
7298 if err != nil {
7399 log .Fatalln ("save list err:" , err )
74100 }
101+
102+ if failCount == 0 {
103+ os .Remove (filepath .Join (configs .WorkDir , "failed_make.list" ))
104+ }
105+
75106 fmt .Println ("--------" )
107+ fmt .Printf (
108+ "Finished.\n " +
109+ "ALL: %d / PASS: %d / FAIL: %d\n " ,
110+ fCount ,
111+ passCount ,
112+ failCount ,
113+ )
76114 fmt .Println ("Check list saved:" , outFilename )
77- fmt .Println ("Finished." )
78- fmt .Println ("Exit after 2 seconds..." )
115+ fmt .Println ("Exit after 3 seconds..." )
79116 time .Sleep (3 * time .Second )
80117 return nil
81118}
0 commit comments