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 }
22 ]
23}`
24
25func createFile(path string, content string) error {
26 f, err := os.Create(path)
27 if err != nil {
28 return err
29 }
30 defer f.Close()
31 _, err = f.WriteString(content)
32 if err != nil {
33 return err
34 }
35 return f.Sync()
36}
37
38func createDefaultConfigRepo(rs *git.RepoSource) error {
39 cn := "config"
40 err := rs.LoadRepos()
41 cr, err := rs.GetRepo(cn)
42 if err == git.ErrMissingRepo {
43 cr, err = rs.InitRepo(cn, false)
44 if err != nil {
45 return err
46 }
47
48 rp := filepath.Join(rs.Path, cn, "README.md")
49 err = createFile(rp, defaultReadme)
50 if err != nil {
51 return err
52 }
53 cp := filepath.Join(rs.Path, cn, "config.json")
54 err = createFile(cp, defaultConfig)
55 if err != nil {
56 return err
57 }
58 wt, err := cr.Repository.Worktree()
59 if err != nil {
60 return err
61 }
62 _, err = wt.Add("README.md")
63 if err != nil {
64 return err
65 }
66 _, err = wt.Add("config.json")
67 if err != nil {
68 return err
69 }
70 _, err = wt.Commit("Default init", &gg.CommitOptions{
71 All: true,
72 Author: &object.Signature{
73 Name: "Smoothie Server",
74 Email: "vt100@charm.sh",
75 },
76 })
77 if err != nil {
78 return err
79 }
80 err = rs.LoadRepos()
81 if err != nil {
82 return err
83 }
84 } else if err != nil {
85 return err
86 }
87 return nil
88}