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