60 lines
1.0 KiB
Go
60 lines
1.0 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
|
|
"github.com/spf13/cobra"
|
|
"github.com/sundowndev/go-search/engine"
|
|
)
|
|
|
|
func init() {
|
|
// Register command
|
|
rootCmd.AddCommand(indexCmd)
|
|
}
|
|
|
|
var indexCmd = &cobra.Command{
|
|
Use: "index",
|
|
Short: "Add files to database indexation",
|
|
Args: cobra.MinimumNArgs(1),
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
client, err := engine.NewRedisClient(redisAddr, redisPort, "", 0)
|
|
if err != nil {
|
|
fmt.Println("Failed to connect to database", redisAddr, redisPort)
|
|
os.Exit(1)
|
|
}
|
|
defer engine.Close(client)
|
|
|
|
path := args[0]
|
|
|
|
fmt.Printf("Walking %v...\n", path)
|
|
|
|
files, err := engine.ScanDir(path)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
for _, file := range files {
|
|
// Open File
|
|
f, err := ioutil.ReadFile(file)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if !engine.IsText(f) {
|
|
continue
|
|
}
|
|
|
|
content := string(f)
|
|
|
|
err = engine.AddFile(client, file, content)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Println("Successfully indexed file", file)
|
|
}
|
|
},
|
|
}
|