initial commit
This commit is contained in:
commit
564b4d1c7a
|
@ -0,0 +1,68 @@
|
||||||
|
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)
|
||||||
|
}
|
Loading…
Reference in New Issue