1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-06-04 23:37:41 +02:00

make log-watching work on windows

This commit is contained in:
Davyd McColl 2021-06-11 17:01:22 +02:00 committed by Jesse Duffield
parent b80fafef02
commit aa9ef12d43

View File

@ -4,15 +4,6 @@ import (
"bufio" "bufio"
"errors" "errors"
"fmt" "fmt"
"io"
"io/ioutil"
"log"
"os"
"path/filepath"
"regexp"
"strconv"
"strings"
"github.com/aybabtme/humanlog" "github.com/aybabtme/humanlog"
"github.com/jesseduffield/lazygit/pkg/commands" "github.com/jesseduffield/lazygit/pkg/commands"
"github.com/jesseduffield/lazygit/pkg/commands/oscommands" "github.com/jesseduffield/lazygit/pkg/commands/oscommands"
@ -23,6 +14,15 @@ import (
"github.com/jesseduffield/lazygit/pkg/secureexec" "github.com/jesseduffield/lazygit/pkg/secureexec"
"github.com/jesseduffield/lazygit/pkg/updates" "github.com/jesseduffield/lazygit/pkg/updates"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"io"
"io/ioutil"
"log"
"os"
"path/filepath"
"regexp"
"runtime"
"strconv"
"strings"
) )
// App struct // App struct
@ -318,6 +318,9 @@ func TailLogs() {
fmt.Printf("Tailing log file %s\n\n", logFilePath) fmt.Printf("Tailing log file %s\n\n", logFilePath)
opts := humanlog.DefaultOptions
opts.Truncates = false
_, err = os.Stat(logFilePath) _, err = os.Stat(logFilePath)
if err != nil { if err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
@ -326,6 +329,11 @@ func TailLogs() {
log.Fatal(err) log.Fatal(err)
} }
if runtime.GOOS == "windows" {
TailLogsNative(logFilePath, opts)
return
}
cmd := secureexec.Command("tail", "-f", logFilePath) cmd := secureexec.Command("tail", "-f", logFilePath)
stdout, _ := cmd.StdoutPipe() stdout, _ := cmd.StdoutPipe()
@ -333,8 +341,6 @@ func TailLogs() {
log.Fatal(err) log.Fatal(err)
} }
opts := humanlog.DefaultOptions
opts.Truncates = false
if err := humanlog.Scanner(stdout, os.Stdout, opts); err != nil { if err := humanlog.Scanner(stdout, os.Stdout, opts); err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -345,3 +351,47 @@ func TailLogs() {
os.Exit(0) os.Exit(0)
} }
func TailLogsNative(logFilePath string, opts *humanlog.HandlerOptions) {
var lastModified int64 = 0
var lastOffset int64 = 0
for {
stat, err := os.Stat(logFilePath)
if err != nil {
log.Fatal(err)
}
if stat.ModTime().Unix() > lastModified {
err = TailFrom(lastOffset, logFilePath, opts)
if err != nil {
log.Fatal(err)
}
}
lastOffset = stat.Size()
}
}
func TailFrom(lastOffset int64, logFilePath string, opts *humanlog.HandlerOptions) error {
file, err := os.Open(logFilePath)
if err != nil {
return err
}
file.Seek(lastOffset, 0)
fileScanner := bufio.NewScanner(file)
var lines []string
for fileScanner.Scan() {
lines = append(lines, fileScanner.Text())
}
file.Close()
lineCount := len(lines)
lastTen := lines
if lineCount > 10 {
lastTen = lines[lineCount-10:]
}
for _, line := range lastTen {
reader := strings.NewReader(line)
if err := humanlog.Scanner(reader, os.Stdout, opts); err != nil {
log.Fatal(err)
}
}
return nil
}