2022-01-04 01:46:14 +02:00
package cheatsheet
import (
"fmt"
"io/fs"
"io/ioutil"
"log"
"os"
"path/filepath"
"regexp"
"github.com/pmezard/go-difflib/difflib"
)
func Check ( ) {
dir := GetDir ( )
tmpDir := filepath . Join ( os . TempDir ( ) , "lazygit_cheatsheet" )
err := os . RemoveAll ( tmpDir )
if err != nil {
2022-04-03 22:19:15 +02:00
log . Fatalf ( "Error occurred while checking if cheatsheets are up to date: %v" , err )
2022-01-04 01:46:14 +02:00
}
2022-03-19 00:38:49 +02:00
err = os . Mkdir ( tmpDir , 0 o700 )
2022-01-04 01:46:14 +02:00
if err != nil {
2022-04-03 22:19:15 +02:00
log . Fatalf ( "Error occurred while checking if cheatsheets are up to date: %v" , err )
2022-01-04 01:46:14 +02:00
}
generateAtDir ( tmpDir )
defer os . RemoveAll ( tmpDir )
actualContent := obtainContent ( dir )
expectedContent := obtainContent ( tmpDir )
if expectedContent == "" {
log . Fatal ( "empty expected content" )
}
if actualContent != expectedContent {
err := difflib . WriteUnifiedDiff ( os . Stdout , difflib . UnifiedDiff {
A : difflib . SplitLines ( expectedContent ) ,
B : difflib . SplitLines ( actualContent ) ,
FromFile : "Expected" ,
FromDate : "" ,
ToFile : "Actual" ,
ToDate : "" ,
Context : 1 ,
} )
if err != nil {
2022-04-03 22:19:15 +02:00
log . Fatalf ( "Error occurred while checking if cheatsheets are up to date: %v" , err )
2022-01-04 01:46:14 +02:00
}
2022-05-08 05:31:13 +02:00
fmt . Printf ( "\nCheatsheets are out of date. Please run `%s` at the project root and commit the changes. If you run the script and no keybindings files are updated as a result, try rebasing onto master and trying again.\n" , CommandToRun ( ) )
2022-01-04 01:46:14 +02:00
os . Exit ( 1 )
}
fmt . Println ( "\nCheatsheets are up to date" )
}
func obtainContent ( dir string ) string {
re := regexp . MustCompile ( ` Keybindings_\w+\.md$ ` )
content := ""
err := filepath . WalkDir ( dir , func ( path string , d fs . DirEntry , err error ) error {
if re . MatchString ( path ) {
bytes , err := ioutil . ReadFile ( path )
if err != nil {
2022-04-03 22:19:15 +02:00
log . Fatalf ( "Error occurred while checking if cheatsheets are up to date: %v" , err )
2022-01-04 01:46:14 +02:00
}
content += fmt . Sprintf ( "\n%s\n\n" , filepath . Base ( path ) )
content += string ( bytes )
}
return nil
} )
if err != nil {
2022-04-03 22:19:15 +02:00
log . Fatalf ( "Error occurred while checking if cheatsheets are up to date: %v" , err )
2022-01-04 01:46:14 +02:00
}
return content
}