1
0
Fork 0

Delete history file if RQLITE_HISTFILESIZE is zero (#1146)

Delete history file if RQLITE_HISTFILESIZE is zero

Fixes https://github.com/rqlite/rqlite/issues/1145.
master
Philip O'Toole 2 years ago committed by GitHub
parent 6d76ff8d6f
commit 8acc0d8ff7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,3 +1,7 @@
## 7.13.1 (unreleased)
### Implementation changes and bug fixes
- [PR #1146](https://github.com/rqlite/rqlite/pull/1146): Delete history file if RQLITE_HISTFILESIZE is zero. Fixes [issue #1145](https://github.com/rqlite/rqlite/issues/1145). Thanks @jamielinux
## 7.13.0 (December 15th 2022) ## 7.13.0 (December 15th 2022)
### New features ### New features
- [PR #1141](https://github.com/rqlite/rqlite/pull/1141): Store and load CLI history across sessions. - [PR #1141](https://github.com/rqlite/rqlite/pull/1141): Store and load CLI history across sessions.

@ -5,19 +5,16 @@ package history
import ( import (
"io" "io"
"os" "os"
"path/filepath"
) )
const historyFile = ".rqlite_history"
// Reader returns a reader of the history file. // Reader returns a reader of the history file.
func Reader() io.ReadCloser { func Reader() io.ReadCloser {
hdir, err := os.UserHomeDir() p, err := Path()
if err != nil { if err != nil {
return nil return nil
} }
f, err := os.Open(filepath.Join(hdir, historyFile)) f, err := os.Open(p)
if err != nil { if err != nil {
return nil return nil
} }
@ -26,12 +23,12 @@ func Reader() io.ReadCloser {
// Writer returns a writer for the history file. // Writer returns a writer for the history file.
func Writer() io.WriteCloser { func Writer() io.WriteCloser {
hdir, err := os.UserHomeDir() p, err := Path()
if err != nil { if err != nil {
return nil return nil
} }
f, err := os.OpenFile(filepath.Join(hdir, historyFile), os.O_RDWR|os.O_CREATE, 0755) f, err := os.OpenFile(p, os.O_RDWR|os.O_CREATE, 0755)
if err != nil { if err != nil {
return nil return nil
} }

@ -0,0 +1,39 @@
package history
import (
"errors"
"io/fs"
"os"
"testing"
)
func Test_Delete(t *testing.T) {
w := Writer()
if w == nil {
t.Fatal("failed to create history writer")
}
p, err := Path()
if err != nil {
t.Fatalf("failed to get history file path: %s", err.Error())
}
if !exists(p) {
t.Fatal("history file does not exist")
}
w.Close()
if err := Delete(); err != nil {
t.Fatalf("failed to delete history file: %s", err.Error())
}
if exists(p) {
t.Fatal("history file exists after deletion")
}
}
func exists(path string) bool {
if _, err := os.Stat(path); err != nil {
return !errors.Is(err, fs.ErrNotExist)
}
return true
}

@ -3,12 +3,9 @@ package history
import ( import (
"io" "io"
"os" "os"
"path/filepath"
"syscall" "syscall"
) )
const historyFile = "rqlite_history"
func setHidden(path string) error { func setHidden(path string) error {
filenameW, err := syscall.UTF16PtrFromString(path) filenameW, err := syscall.UTF16PtrFromString(path)
if err != nil { if err != nil {
@ -25,12 +22,12 @@ func setHidden(path string) error {
// Reader returns a reader of the history file. // Reader returns a reader of the history file.
func Reader() io.ReadCloser { func Reader() io.ReadCloser {
hdir, err := os.UserHomeDir() p, err := Path()
if err != nil { if err != nil {
return nil return nil
} }
f, err := os.Open(filepath.Join(hdir, historyFile)) f, err := os.Open(p)
if err != nil { if err != nil {
return nil return nil
} }
@ -39,16 +36,15 @@ func Reader() io.ReadCloser {
// Writer returns a writer for the history file. // Writer returns a writer for the history file.
func Writer() io.WriteCloser { func Writer() io.WriteCloser {
hdir, err := os.UserHomeDir() p, err := Path()
if err != nil { if err != nil {
return nil return nil
} }
path := filepath.Join(hdir, historyFile) f, err := os.OpenFile(p, os.O_RDWR|os.O_CREATE, 0755)
f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0755)
if err != nil { if err != nil {
return nil return nil
} }
setHidden(path) // best effort setHidden(p) // best effort
return f return f
} }

@ -0,0 +1,26 @@
package history
import (
"os"
"path/filepath"
)
const historyFile = ".rqlite_history"
// Path returns the full path to the history file.
func Path() (string, error) {
hdir, err := os.UserHomeDir()
if err != nil {
return "", err
}
return filepath.Join(hdir, historyFile), nil
}
// Delete deletes the history file.
func Delete() error {
p, err := Path()
if err != nil {
return err
}
return os.Remove(p)
}

@ -208,9 +208,11 @@ func main() {
} }
hw := history.Writer() hw := history.Writer()
if hw != nil { sz := history.Size()
history.Write(term.History, history.Size(), hw) history.Write(term.History, sz, hw)
hw.Close() hw.Close()
if sz <= 0 {
history.Delete()
} }
ctx.String("bye~\n") ctx.String("bye~\n")
return nil return nil

Loading…
Cancel
Save