Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
laktak committed Jan 31, 2025
1 parent 3e22295 commit 85f7e1b
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 63 deletions.
62 changes: 29 additions & 33 deletions cmd/chkbit/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ type Main struct {
bps *util.RateCalc
}

func (m *Main) logFile(text string) {
func (m *Main) log(text string) {
m.logger.Println(time.Now().UTC().Format("2006-01-02 15:04:05"), text)
}

Expand All @@ -121,31 +121,25 @@ func (m *Main) logInfo(col, text string) {
fmt.Println(text)
}
}
m.logFile(text)
m.log(text)
}

func (m *Main) logError(text string) {
text = chkbit.StatusPanic.String() + " " + text
func (m *Main) printStderr(msg string) {
fmt.Fprintln(os.Stderr, msg)
}

func (m *Main) printErr(text string) {
if m.progress == Fancy {
lterm.Write(termAlertFG)
fmt.Fprintln(os.Stderr, text)
m.printStderr(text)
lterm.Write(lterm.Reset)
} else {
fmt.Fprintln(os.Stderr, text)
m.printStderr(text)
}

m.logFile(text)
}

func (m *Main) printError(text string) {
if m.progress == Fancy {
lterm.Write(termAlertFG)
fmt.Fprintln(os.Stderr, text)
lterm.Write(lterm.Reset)
} else {
fmt.Fprintln(os.Stderr, text)
}
func (m *Main) printError(err error) {
m.printErr("error: " + err.Error())
}

func (m *Main) logStatus(stat chkbit.Status, message string) bool {
Expand All @@ -160,7 +154,7 @@ func (m *Main) logStatus(stat chkbit.Status, message string) bool {
}

if m.logVerbose || !stat.IsVerbose() {
m.logFile(stat.String() + " " + message)
m.log(stat.String() + " " + message)
}

if m.verbose || !stat.IsVerbose() {
Expand Down Expand Up @@ -239,17 +233,17 @@ func (m *Main) process(cmd Command, cli CLI) (bool, error) {
switch cmd {
case Check:
pathList = cli.Check.Paths
m.logFile("chkbit check " + strings.Join(pathList, ", "))
m.log("chkbit check " + strings.Join(pathList, ", "))
case Update:
pathList = cli.Update.Paths
m.context.UpdateIndex = true
m.context.UpdateSkipCheck = cli.Update.SkipExisting
m.context.ForceUpdateDmg = cli.Update.Force
m.logFile("chkbit update " + strings.Join(pathList, ", "))
m.log("chkbit update " + strings.Join(pathList, ", "))
case ShowIgnored:
pathList = cli.ShowIgnored.Paths
m.context.ShowIgnoredOnly = true
m.logFile("chkbit show-ignored " + strings.Join(pathList, ", "))
m.log("chkbit show-ignored " + strings.Join(pathList, ", "))
}

m.context.LogDeleted = cli.LogDeleted
Expand Down Expand Up @@ -328,22 +322,22 @@ func (m *Main) printResult() error {

// summarize errors
if len(m.dmgList) > 0 {
m.printError("chkbit detected damage in these files:")
for _, err := range m.dmgList {
fmt.Fprintln(os.Stderr, err)
m.printErr("chkbit detected damage in these files:")
for _, item := range m.dmgList {
m.printStderr(item)
}
n := len(m.dmgList)
status := fmt.Sprintf("error: detected %s with damage!", util.LangNum1MutateSuffix(n, "file"))
m.logFile(status)
m.printError(status)
m.log(status)
m.printErr(status)
}

if len(m.errList) > 0 {
status := "chkbit ran into errors"
m.logFile(status + "!")
m.printError(status + ":")
for _, err := range m.errList {
fmt.Fprintln(os.Stderr, err)
m.log(status + "!")
m.printErr(status + ":")
for _, item := range m.errList {
m.printStderr(item)
}
}

Expand Down Expand Up @@ -408,7 +402,9 @@ func (m *Main) run() int {
st = chkbit.IndexTypeAtom
}
if err := chkbit.InitializeIndexStore(st, cli.Init.Path, cli.IndexName, cli.Init.Force); err != nil {
m.logError(err.Error())
text := chkbit.StatusPanic.String() + " " + err.Error()
m.printErr(text)
m.log(text)
return 1
}
return 0
Expand All @@ -429,7 +425,7 @@ func (m *Main) run() int {
m.logVerbose = cli.LogVerbose
f, err := os.OpenFile(cli.LogFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
fmt.Println("error: " + err.Error())
m.printError(err)
return 1
}
defer f.Close()
Expand All @@ -443,7 +439,7 @@ func (m *Main) run() int {
}
}
} else {
fmt.Println("error: " + err.Error())
m.printError(err)
return 1
}

Expand All @@ -454,7 +450,7 @@ func main() {
defer func() {
if r := recover(); r != nil {
// panic
fmt.Println(r)
fmt.Fprintln(os.Stderr, r)
os.Exit(1)
}
}()
Expand Down
85 changes: 56 additions & 29 deletions index.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ var (
)

type idxInfo struct {
ModTime int64 `json:"mod"`
Algo *string `json:"a,omitempty"`
Hash *string `json:"h,omitempty"`
ModTime int64 `json:"mod"`
Algo *string `json:"a,omitempty"`
Hash *string `json:"h,omitempty"`
// convert from legacy python format
LegacyHash *string `json:"md5,omitempty"`
}

Expand All @@ -29,13 +30,11 @@ type indexFile struct {
Dir []string `json:"dirlist,omitempty"`
}

type idxInfo1 struct {
ModTime int64 `json:"mod"`
Hash string `json:"md5"`
}

type indexFile1 struct {
Data map[string]idxInfo1 `json:"data"`
type indexLoadResult struct {
fileList map[string]idxInfo
dirList []string
converted bool
verified bool
}

type Index struct {
Expand Down Expand Up @@ -267,51 +266,79 @@ func (i *Index) save() (bool, error) {
}

func (i *Index) load() error {
file, err := i.context.store.Load(i.getIndexFilepath())
if file == nil || err != nil {
fileData, err := i.context.store.Load(i.getIndexFilepath())
if fileData == nil || err != nil {
return err
}
i.modified = false

res, err := loadIndexFile(fileData)
i.cur = res.fileList
if !res.verified {
i.logFile(StatusErrorIdx, i.getIndexFilepath())
}
i.modified = !res.verified || res.converted

// dirs
if res.dirList != nil {
slices.Sort(res.dirList)
i.curDirList = res.dirList
}

return nil
}

func loadIndexFile(fileData []byte) (*indexLoadResult, error) {

type idxInfo1 struct {
ModTime int64 `json:"mod"`
Hash string `json:"md5"`
}

type indexFile1 struct {
Data map[string]idxInfo1 `json:"data"`
}

if fileData == nil {
return nil, nil
}
res := &indexLoadResult{}

var data indexFile
err = json.Unmarshal(file, &data)
err := json.Unmarshal(fileData, &data)
if err != nil {
return err
return nil, err
}
if data.IdxRaw != nil {
err = json.Unmarshal(data.IdxRaw, &i.cur)
err = json.Unmarshal(data.IdxRaw, &res.fileList)
if err != nil {
return err
return nil, err
}
text := data.IdxRaw
if data.IdxHash != hashMd5(text) {
// old versions may have saved the JSON encoded with extra spaces
text, _ = json.Marshal(data.IdxRaw)
} else {
}
if data.IdxHash != hashMd5(text) {
i.modified = true
i.logFile(StatusErrorIdx, i.getIndexFilepath())
}
res.verified = data.IdxHash == hashMd5(text)
} else {
var data1 indexFile1
json.Unmarshal(file, &data1)
json.Unmarshal(fileData, &data1)
res.fileList = make(map[string]idxInfo)
if data1.Data != nil {
// convert from js to new format
for name, item := range data1.Data {
i.cur[name] = idxInfo{
res.fileList[name] = idxInfo{
ModTime: item.ModTime,
Algo: &legacyAlgoMd5,
Hash: &item.Hash,
}
}
}
res.converted = true
res.verified = true
}

// dirs
if data.Dir != nil {
slices.Sort(data.Dir)
i.curDirList = data.Dir
}

return nil
res.dirList = data.Dir
return res, nil
}
2 changes: 1 addition & 1 deletion indexstore.go
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ func (s *indexStore) importCache(dbFile string) error {
return errors.New("invalid json (end)")
}

return err
return nil
}

func getAtomFile(path, indexName, suffix string) string {
Expand Down

0 comments on commit 85f7e1b

Please sign in to comment.