defaults.go

 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": ""
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}