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 if err != nil {
45 return err
46 }
47 _, err = rs.GetRepo(cn)
48 if err == git.ErrMissingRepo {
49 cr, err := rs.InitRepo(cn, false)
50 if err != nil {
51 return err
52 }
53
54 rp := filepath.Join(rs.Path, cn, "README.md")
55 err = createFile(rp, defaultReadme)
56 if err != nil {
57 return err
58 }
59 cp := filepath.Join(rs.Path, cn, "config.json")
60 err = createFile(cp, defaultConfig)
61 if err != nil {
62 return err
63 }
64 wt, err := cr.Repository.Worktree()
65 if err != nil {
66 return err
67 }
68 _, err = wt.Add("README.md")
69 if err != nil {
70 return err
71 }
72 _, err = wt.Add("config.json")
73 if err != nil {
74 return err
75 }
76 _, err = wt.Commit("Default init", &gg.CommitOptions{
77 All: true,
78 Author: &object.Signature{
79 Name: "Soft-Serve Server",
80 Email: "vt100@charm.sh",
81 },
82 })
83 if err != nil {
84 return err
85 }
86 err = rs.LoadRepos()
87 if err != nil {
88 return err
89 }
90 } else if err != nil {
91 return err
92 }
93 return nil
94}