2022-10-22 17:38:39 +08:00
|
|
|
package runner
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2023-07-14 21:47:11 +08:00
|
|
|
"git.0x7f.app/WOJ/woj-server/internal/e"
|
|
|
|
"git.0x7f.app/WOJ/woj-server/pkg/utils"
|
2022-10-22 17:38:39 +08:00
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
)
|
|
|
|
|
|
|
|
func (s *service) Compile(version uint, user string, lang string) (JudgeStatus, e.Status) {
|
2022-10-23 17:29:35 +08:00
|
|
|
target := filepath.Join(UserDir, user, fmt.Sprintf("%s.out", user))
|
2022-10-22 17:38:39 +08:00
|
|
|
|
|
|
|
_ = os.Remove(target)
|
|
|
|
status := s.checkAndExecute(version, user, lang, "problem_compile.sh", e.RunnerUserCompileFailed)
|
|
|
|
|
2022-10-23 17:29:35 +08:00
|
|
|
log := filepath.Join(UserDir, user, fmt.Sprintf("%s.compile.log", user))
|
2022-10-22 17:38:39 +08:00
|
|
|
msg, err := utils.FileRead(log)
|
2022-10-30 22:40:59 +08:00
|
|
|
msg = utils.If(err == nil, msg, nil)
|
2022-10-22 17:38:39 +08:00
|
|
|
msgText := string(msg)
|
|
|
|
|
2022-10-23 17:29:35 +08:00
|
|
|
if !utils.FileExist(target) || utils.FileEmpty(target) {
|
2022-10-22 17:38:39 +08:00
|
|
|
return JudgeStatus{
|
|
|
|
Message: "compile failed",
|
|
|
|
Tasks: []TaskStatus{{Verdict: VerdictCompileError, Message: msgText}}},
|
2022-10-30 22:40:59 +08:00
|
|
|
utils.If(status == e.Success, e.RunnerUserCompileFailed, status)
|
2022-10-22 17:38:39 +08:00
|
|
|
}
|
2022-10-23 17:29:35 +08:00
|
|
|
|
|
|
|
return JudgeStatus{}, e.Success
|
2022-10-22 17:38:39 +08:00
|
|
|
}
|