initial commit
This commit is contained in:
commit
564b4d1c7a
1 changed files with 68 additions and 0 deletions
68
seafile_recovery.go
Normal file
68
seafile_recovery.go
Normal file
|
@ -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 a new issue