defaults.go

 1package tui
 2
 3import (
 4	"os"
 5	"path/filepath"
 6	"soft-serve/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 = "# Soft-Serve\n\n Welcome! You can configure your Soft-Serve server by cloning this repo and pushing changes.\n\n## Repos\n\n{{ range .Menu }}* {{ .Name }}{{ if .Note }} - {{ .Note }} {{ end }}\n  - `git clone ssh://{{$.Host}}:{{$.Port}}/{{.Repo}}`\n{{ end }}"
13
14const defaultConfig = `{
15	"name": "Soft-Serve",
16	"show_all_repos": true,
17	"host": "localhost",
18	"port": 23231,
19	"menu": [
20	  {
21			"name": "Home",
22			"repo": "config",
23			"note": "Configuration and content repo for this server"
24		}
25	]
26}`
27
28func createFile(path string, content string) error {
29	f, err := os.Create(path)
30	if err != nil {
31		return err
32	}
33	defer f.Close()
34	_, err = f.WriteString(content)
35	if err != nil {
36		return err
37	}
38	return f.Sync()
39}
40
41func createDefaultConfigRepo(rs *git.RepoSource) error {
42	cn := "config"
43	err := rs.LoadRepos()
44	cr, err := rs.GetRepo(cn)
45	if err == git.ErrMissingRepo {
46		cr, err = rs.InitRepo(cn, false)
47		if err != nil {
48			return err
49		}
50
51		rp := filepath.Join(rs.Path, cn, "README.md")
52		err = createFile(rp, defaultReadme)
53		if err != nil {
54			return err
55		}
56		cp := filepath.Join(rs.Path, cn, "config.json")
57		err = createFile(cp, defaultConfig)
58		if err != nil {
59			return err
60		}
61		wt, err := cr.Repository.Worktree()
62		if err != nil {
63			return err
64		}
65		_, err = wt.Add("README.md")
66		if err != nil {
67			return err
68		}
69		_, err = wt.Add("config.json")
70		if err != nil {
71			return err
72		}
73		_, err = wt.Commit("Default init", &gg.CommitOptions{
74			All: true,
75			Author: &object.Signature{
76				Name:  "Soft-Serve Server",
77				Email: "vt100@charm.sh",
78			},
79		})
80		if err != nil {
81			return err
82		}
83		err = rs.LoadRepos()
84		if err != nil {
85			return err
86		}
87	} else if err != nil {
88		return err
89	}
90	return nil
91}