seafile_recovery/seafile_recovery.go

69 lines
1.7 KiB
Go

package main
import (
"io/ioutil"
"os"
"path/filepath"
"log"
"github.com/docopt/docopt-go"
)
type Commit struct {
CommitId string `json:"commit_id"`
RootId string `json:"root_id"`
RepoId string `json:"repo_id"`
CreatorName string `json:"creator_name"`
Creator string `json:"creator"`
Description string `json:"description"`
Ctime uint64 `json:"ctime"`
ParentId string `json:"parent_id"`
SecondParentId string `json:"second_parent_id"`
RepoName string `json:"repo_name"`
RepoDesc string `json:"repo_desc"`
RepoCategory string `json:"repo_category"`
NoLocalHistory int `json:"no_local_history"`
Version int `json:"version"`
}
func checkFolder(storage string) {
files, err := ioutil.ReadDir(storage)
if err != nil { log.Fatal(err) }
checked_folders := map[string]bool{"fs": false, "commits": false, "blocks": false}
for _, f := range files {
if _, ok := checked_folders[f.Name()]; ok {
info, err := os.Stat(filepath.Join(storage, f.Name()));
if err == nil && info.IsDir() {
checked_folders[f.Name()] = true
}
}
}
for path, seen := range checked_folders {
if !seen { log.Fatal("Folder ", path, " is required but not present!") }
}
}
func main() {
usage := `Seafile Recovery.
Usage:
seafile_recovery [--storage=<sto>] commits <repoid>
seafile_recovery (-h | --help)
Options:
-h --help Show this screen
--storage=<sto> Set Seafile storage path [default: ./storage]`
var config struct {
Commits bool `docopt:"commits"`
Storage string `docopt:"--storage"`
RepoId string `docopt:"<repoid>"`
}
opts, err := docopt.ParseDoc(usage)
if err != nil { log.Fatal(err) }
opts.Bind(&config)
checkFolder(config.Storage)
}