diff --git a/checks.go b/checks.go index 7b5b084..c87ab83 100644 --- a/checks.go +++ b/checks.go @@ -2,22 +2,15 @@ package main import( "log" - "io/ioutil" "os" "path/filepath" ) func checkRootFolder(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 f, _ := range checked_folders { + if info, err := os.Stat(filepath.Join(storage, f)); err == nil && info.IsDir() { + checked_folders[f] = true } } diff --git a/commit.go b/commit.go index 59f6a3d..3835322 100644 --- a/commit.go +++ b/commit.go @@ -2,8 +2,16 @@ package main import ( "log" + "io/ioutil" + "path/filepath" ) +type RepoCommits struct { + Config configCollect + CommitDesc map[string]string + CommitContent map[string]Commit +} + type Commit struct { CommitId string `json:"commit_id"` RootId string `json:"root_id"` @@ -22,6 +30,45 @@ type Commit struct { } func cmdCommit(config configCollect) { - rexists := repoExistsIn(config.Storage, config.RepoId) - if !rexists["commits"] { log.Fatal("No commits folder found for repo ",config.RepoId) } + rc := NewRepoCommits(config) + rc.CollectDescs() + rc.PrintDescs() +} + +func NewRepoCommits (config configCollect) *RepoCommits { + rc := new(RepoCommits) + rc.Config = config + rc.CommitDesc = make(map[string]string) + rc.CommitContent = make(map[string]Commit) + return rc +} + +func (rc* RepoCommits) CollectDescs() { + baseFolder := filepath.Join(rc.Config.Storage, "commits", rc.Config.RepoId) + log.Println(baseFolder) + layer1, err := ioutil.ReadDir(baseFolder) + if err != nil { log.Fatal(err) } + for _, l1 := range layer1 { + intFolder := filepath.Join(baseFolder, l1.Name()) + layer2, err := ioutil.ReadDir(intFolder) + if err != nil { log.Fatal(err) } + for _, l2 := range layer2 { + commitId := l1.Name() + l2.Name() + commitPath := filepath.Join(intFolder, l2.Name()) + rc.CommitDesc[commitId] = commitPath + } + } +} + +func (rc* RepoCommits) PrintDescs() { + limit := 10 + for id, path := range rc.CommitDesc { + log.Println(id, path) + limit = limit - 1 + if limit < 0 { + log.Println("Too many commits, output has been truncated") + break + } + } + log.Println("Repo", rc.Config.RepoId, "contains", len(rc.CommitDesc), "commits") } diff --git a/seafile_recovery.go b/seafile_recovery.go index d0597a5..ebbbf8e 100644 --- a/seafile_recovery.go +++ b/seafile_recovery.go @@ -22,8 +22,10 @@ Options: opts.Bind(&config) checkRootFolder(config.Storage) + rexists := repoExistsIn(config.Storage, config.RepoId) if config.Commits { + if !rexists["commits"] { log.Fatal("No commits folder found for repo ",config.RepoId) } cmdCommit(config) } else { log.Fatal("This command is not implemented")