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}