1package tui
2
3import (
4 "os"
5 "path/filepath"
6 "smoothie/git"
7
8 gg "github.com/go-git/go-git/v5"
9 "github.com/go-git/go-git/v5/plumbing/object"
10)
11
12const defaultReadme = "# Smoothie\nWelcome to Smoothie. To setup your own configuration, please clone this repo."
13
14const defaultConfig = `{
15 "name": "Smoothie",
16 "show_all_repos": true,
17 "menu": [
18 {
19 "name": "Home",
20 "repo": "config",
21 "note": "Configuration and content repo"
22 }
23 ]
24}`
25
26func createFile(path string, content string) error {
27 f, err := os.Create(path)
28 if err != nil {
29 return err
30 }
31 defer f.Close()
32 _, err = f.WriteString(content)
33 if err != nil {
34 return err
35 }
36 return f.Sync()
37}
38
39func createDefaultConfigRepo(rs *git.RepoSource) error {
40 cn := "config"
41 err := rs.LoadRepos()
42 cr, err := rs.GetRepo(cn)
43 if err == git.ErrMissingRepo {
44 cr, err = rs.InitRepo(cn, false)
45 if err != nil {
46 return err
47 }
48
49 rp := filepath.Join(rs.Path, cn, "README.md")
50 err = createFile(rp, defaultReadme)
51 if err != nil {
52 return err
53 }
54 cp := filepath.Join(rs.Path, cn, "config.json")
55 err = createFile(cp, defaultConfig)
56 if err != nil {
57 return err
58 }
59 wt, err := cr.Repository.Worktree()
60 if err != nil {
61 return err
62 }
63 _, err = wt.Add("README.md")
64 if err != nil {
65 return err
66 }
67 _, err = wt.Add("config.json")
68 if err != nil {
69 return err
70 }
71 _, err = wt.Commit("Default init", &gg.CommitOptions{
72 All: true,
73 Author: &object.Signature{
74 Name: "Smoothie Server",
75 Email: "vt100@charm.sh",
76 },
77 })
78 if err != nil {
79 return err
80 }
81 err = rs.LoadRepos()
82 if err != nil {
83 return err
84 }
85 } else if err != nil {
86 return err
87 }
88 return nil
89}