GitRoot

craft your forge, build your project, grow your community freely
 1// SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
 2//
 3// SPDX-License-Identifier: MIT
 4
 5package gitroot
 6
 7import (
 8	"runtime"
 9	"time"
10)
11
12//go:wasmexport init
13func Init(repoNamePtr, repoNameSize, confHasChangedPtr, confHasChangedSize, confPtr, confSize uint32) {
14	repoName := ptrToString(repoNamePtr, repoNameSize)
15	serializedConf := ptrToString(confPtr, confSize)
16	confHasChanged := ptrToString(confHasChangedPtr, confHasChangedSize)
17	server.plugin.Init(repoName, confHasChanged == "true", serializedConf)
18}
19
20//go:wasmexport startCommit
21func StartCommit(branchPtr, branchSize, hashPrt, hashSize, msgPrt, msgSize, datePtr, dateSize uint32) {
22	date, err := time.Parse(time.RFC3339, ptrToString(datePtr, dateSize))
23	if err != nil {
24		message := "can't parse date of commit"
25		ptr, size := stringToPtr(message)
26		errPtr, errSize := stringToPtr(err.Error())
27		_logError(ptr, size, errPtr, errSize)
28		runtime.KeepAlive(message)
29		runtime.KeepAlive(err)
30		date = time.Now()
31	}
32	commit := Commit{
33		Branch:  ptrToString(branchPtr, branchSize),
34		Hash:    ptrToString(hashPrt, hashSize),
35		Message: ptrToString(msgPrt, msgSize),
36		Date:    date,
37	}
38	server.plugin.StartCommit(commit)
39}
40
41//go:wasmexport addFile
42func AddFile(ptr, size uint32) {
43	server.plugin.AddFile(ptrToString(ptr, size))
44}
45
46//go:wasmexport modFile
47func ModFile(fromPtr, fromSize, toPtr, toSize uint32) {
48	server.plugin.ModFile(ptrToString(fromPtr, fromSize), ptrToString(toPtr, toSize))
49}
50
51//go:wasmexport delFile
52func DelFile(ptr, size uint32) {
53	server.plugin.DelFile(ptrToString(ptr, size))
54}
55
56//go:wasmexport endCommit
57func EndCommit(branchPtr, branchSize, hashPrt, hashSize, msgPrt, msgSize uint32) {
58	commit := Commit{
59		Branch:  ptrToString(branchPtr, branchSize),
60		Hash:    ptrToString(hashPrt, hashSize),
61		Message: ptrToString(msgPrt, msgSize),
62	}
63	server.plugin.EndCommit(commit)
64}
65
66//go:wasmexport finish
67func Finish() {
68	server.plugin.Finish()
69}
70
71//go:wasmexport defaultRun
72func DefaultRun() uint64 {
73	ptr, size := stringToLeakedPtr(server.run)
74	return (uint64(ptr) << uint64(32)) | uint64(size)
75}