// Copyright (C) 2017 Marius Schellenberger package main import ( "encoding/json" "fmt" "os" "github.com/blevesearch/bleve" ) type DumpArticle struct { Title string `json:"title"` LinkTitle string `json:"link_title"` MD string `json:"md"` Created string `json:"created"` Updated string `json:"updated"` Public bool `json:"public"` } func verboseLog(prefix, title string) { if verbose { fmt.Fprintln(os.Stderr, prefix, title) } } func dumpWiki() error { index, err := bleve.OpenUsing(bleveStore, map[string]interface{}{"read_only": true}) if err != nil { return err } engine = NewEngine(index) art, err := engine.Get(false, indexName) if err != nil { return err } defer engine.Close() var arts []DumpArticle titles, err := engine.Dump() if err != nil { return err } for _, title := range titles { art, err = engine.Get(false, title) if err != nil { return err } verboseLog("dump:", art.Title) arts = append(arts, DumpArticle{ Title: art.Title, LinkTitle: art.LinkTitle, MD: art.MD, Created: art.Created, Updated: art.Updated, Public: art.Public, }) } return json.NewEncoder(os.Stdout).Encode(arts) } func restoreWiki() (err error) { index, err := bleve.Open(bleveStore) if err != nil { mapping := bleve.NewIndexMapping() index, err = bleve.New(bleveStore, mapping) if err != nil { return } } engine = NewEngine(index) defer engine.Close() var arts []DumpArticle err = json.NewDecoder(os.Stdin).Decode(&arts) if err != nil { return } for _, art := range arts { verboseLog("restore:", art.Title) err = engine.Restore(art) if err != nil { return } } return }