Skip to content

Instantly share code, notes, and snippets.

@Krewn
Last active March 27, 2022 14:11
Show Gist options
  • Save Krewn/4654972f4202d7a2906329957570a812 to your computer and use it in GitHub Desktop.
Save Krewn/4654972f4202d7a2906329957570a812 to your computer and use it in GitHub Desktop.
Uses SHA256 hash sums to determine which files change.
package main
import(
"fmt"
"io/ioutil"
"log"
"strings"
"os"
)
func loadLog(fileName string) map[string]string {
hashes := make(map[string]string)
content, err := ioutil.ReadFile(fileName)
if err != nil {
log.Fatal(err)
}
text := string(content)
lines := strings.Split(text, "\n")
for _,line := range lines{
if len(line) > 64{
hash := line[:64]
fn := line[64:]
hashes[hash] = fn
}
}
return hashes
}
func hasKey(collection map[string]string,item string) bool{
_,ok := collection[item]
return ok
}
func main(){
log1 := loadLog(os.Args[1])
log2 := loadLog(os.Args[2])
fmt.Println("Changed in second log:")
for k := range log2{
if !hasKey(log1,k){
fmt.Println(k+log2[k])
}
}
fmt.Println("Changed from first log:")
for k := range log1{
if !hasKey(log2,k){
fmt.Println(k+log1[k])
}
}
}
package main
import(
"os"
"fmt"
"io/ioutil"
"crypto/sha256"
"log"
"encoding/hex"
"path/filepath"
)
func hashFile(fileHandle string)string{
hasher := sha256.New()
s, err := ioutil.ReadFile(fileHandle)
hasher.Write(s)
if err != nil {
//log.Fatal(err)
fmt.Println("#[ERR1HashingFile]"+fileHandle)
}
return hex.EncodeToString(hasher.Sum(nil))
}
func hashLogger(prefix string,fileHandle os.FileInfo)string{
hashes := ""
if fileHandle.IsDir(){
hashes += fileHandle.Name()+"\n"
err := os.Chdir(fileHandle.Name())
if err != nil {
fmt.Println("#[ERR2ChangingDirtectory]"+fileHandle.Name())
}else{
f,err := os.Open(".")
if err != nil {
fmt.Println("#[ERR3OpeningDirectroy]"+fileHandle.Name())
//log.Fatal(err)
}else{
files,_:= f.Readdir(0)
for _, v := range files {
hashes += hashLogger(filepath.Join(prefix,fileHandle.Name()),v)+"\n"
}
os.Chdir("..")
}
}
} else {
hashes+=hashFile(fileHandle.Name())+"@"+filepath.Join(prefix,fileHandle.Name())
}
return hashes
}
func main(){
fi,_ := os.Stat(os.Args[1])
fmt.Println(hashLogger("",fi))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment