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, committerPtr, committerSize 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		Committer: ptrToString(committerPtr, committerSize),
38	}
39	server.plugin.StartCommit(commit)
40}
41
42//go:wasmexport addFile
43func AddFile(ptr, size uint32) {
44	server.plugin.AddFile(ptrToString(ptr, size))
45}
46
47//go:wasmexport modFile
48func ModFile(fromPtr, fromSize, toPtr, toSize uint32) {
49	server.plugin.ModFile(ptrToString(fromPtr, fromSize), ptrToString(toPtr, toSize))
50}
51
52//go:wasmexport delFile
53func DelFile(ptr, size uint32) {
54	server.plugin.DelFile(ptrToString(ptr, size))
55}
56
57//go:wasmexport endCommit
58func EndCommit(branchPtr, branchSize, hashPrt, hashSize, msgPrt, msgSize, datePtr, dateSize, committerPtr, committerSize uint32) {
59	date, err := time.Parse(time.RFC3339, ptrToString(datePtr, dateSize))
60	if err != nil {
61		message := "can't parse date of commit"
62		ptr, size := stringToPtr(message)
63		errPtr, errSize := stringToPtr(err.Error())
64		_logError(ptr, size, errPtr, errSize)
65		runtime.KeepAlive(message)
66		runtime.KeepAlive(err)
67		date = time.Now()
68	}
69	commit := Commit{
70		Branch:    ptrToString(branchPtr, branchSize),
71		Hash:      ptrToString(hashPrt, hashSize),
72		Message:   ptrToString(msgPrt, msgSize),
73		Date:      date,
74		Committer: ptrToString(committerPtr, committerSize),
75	}
76	server.plugin.EndCommit(commit)
77}
78
79//go:wasmexport finish
80func Finish() {
81	server.plugin.Finish()
82}
83
84//go:wasmexport defaultRun
85func DefaultRun() uint64 {
86	ptr, size := stringToLeakedPtr(server.run)
87	return (uint64(ptr) << uint64(32)) | uint64(size)
88}