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}