diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm index 6c4c56f34dc..ef51776ec84 100644 --- a/code/controllers/subsystems/ticker.dm +++ b/code/controllers/subsystems/ticker.dm @@ -421,7 +421,7 @@ SUBSYSTEM_DEF(ticker) to_world(SPAN_VOTE(SPAN_BOLD("Tip of the round:") + " [html_encode(message)]")) /datum/controller/subsystem/ticker/proc/print_testmerges() - var/data = GLOB.revdata.GetTestMergeInfo() + var/data = GLOB.revdata.testmerge_overview() if (data) to_world(data) diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index 419ebae180c..93bc0d39443 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -1,85 +1,130 @@ -GLOBAL_DATUM_INIT(revdata, /datum/getrev, new) +GLOBAL_DATUM_INIT(revdata, /datum/getrev, new()) + +/hook/startup/proc/initialize_test_merges() + if (!GLOB.revdata) + LOG_DEBUG("GETREV: No rev found.") + return TRUE + + GLOB.revdata.testmerge_initialize() + + return TRUE /datum/getrev - var/commit + var/branch + var/revision var/date - var/originmastercommit - var/list/testmerge = list() + var/showinfo + var/list/datum/tgs_revision_information/test_merge/test_merges + var/greeting_info /datum/getrev/New() - commit = rustg_git_revparse("HEAD") - if (commit) - date = rustg_git_commit_date(commit) - originmastercommit = rustg_git_revparse("origin/master") + var/list/head_branch = file2list(".git/HEAD", "\n") + if(head_branch.len) + branch = copytext(head_branch[1], 17) -/datum/getrev/proc/load_tgs_info() - testmerge = world.TgsTestMerges() - var/datum/tgs_revision_information/revinfo = world.TgsRevision() - if (revinfo) - commit = revinfo.commit - date = revinfo.timestamp || rustg_git_commit_date(commit) - originmastercommit = revinfo.origin_commit + var/list/head_log = file2list(".git/logs/HEAD", "\n") + for(var/line=head_log.len, line>=1, line--) + if(head_log[line]) + var/list/last_entry = text2list(head_log[line], " ") + if(last_entry.len < 2) continue + revision = last_entry[2] + // Get date/time + if(last_entry.len >= 5) + var/unix_time = text2num(last_entry[5]) + if(unix_time) + date = unix2date(unix_time) + break - // Goes to DD log and config_error.txt - log_world(get_log_message()) - -/datum/getrev/proc/get_log_message() - var/list/msg = list() - msg += "Server Revision Information: [date]" - if (originmastercommit) - msg += " (origin/master: [originmastercommit])" - - for(var/line in testmerge) - var/datum/tgs_revision_information/test_merge/tm = line - msg += "Test merge active of PR #[tm.number] commit [tm.head_commit]" - - if (commit && commit != originmastercommit) - msg += "HEAD: [commit]" - else if (!originmastercommit) - msg += "No commit information available." - - return msg.Join("\n") - -/datum/getrev/proc/GetTestMergeInfo(header = TRUE) - if (!length(testmerge)) - return "" - . = header ? "The following PRs are currently test-merged on the server:
" : "" - for (var/line in testmerge) - var/datum/tgs_revision_information/test_merge/tm = line - var/cm = tm.head_commit - var/details = ": '" + html_encode(tm.title) + "' by " + html_encode(tm.author) + " at commit " + html_encode(copytext_char(cm, 1, 11)) - . += "#[tm.number][details]
" + world.log << "Running revision:" + world.log << branch + world.log << date + world.log << revision /client/verb/showrevinfo() set category = "OOC" set name = "Show Server Revision" set desc = "Check the current server code revision" - var/list/msg = list() - // BYOND info - msg += "BYOND Version: [world.byond_version].[world.byond_build]" - if(DM_VERSION != world.byond_version || DM_BUILD != world.byond_build) - msg += "Compiled with BYOND Version: [DM_VERSION].[DM_BUILD]" - - // Rev info - var/datum/getrev/revdata = GLOB.revdata - msg += "
Server Revision Info:" - msg += "Server revision compiled on: [revdata.date]" - var/pc = revdata.originmastercommit - if(pc) - msg += "Master commit: [pc]" - if(length(revdata.testmerge)) - msg += revdata.GetTestMergeInfo() - if(revdata.commit && revdata.commit != revdata.originmastercommit) - msg += "Local commit: [revdata.commit]" - else if(!pc) - msg += SPAN_ALERT("No commit information available!") - if(world.TgsAvailable()) - var/datum/tgs_version/version = world.TgsVersion() - msg += "TGS version: [version.raw_parameter]" - var/datum/tgs_version/api_version = world.TgsApiVersion() - msg += "DMAPI version: [api_version.raw_parameter]" + if(GLOB.revdata.revision) + to_chat(src, "Server revision: [GLOB.revdata.branch] - [GLOB.revdata.date]") + if(GLOB.config.githuburl) + to_chat(src, "[GLOB.revdata.revision]") + else + to_chat(src, GLOB.revdata.revision) else - msg += SPAN_ALERT("TGS API not available!") + to_chat(src, "Revision unknown") - to_chat(src, SPAN_INFO(msg.Join("
"))) + to_chat(src, "Current Map: [SSatlas.current_map.full_name]") + +/datum/getrev/proc/testmerge_overview() + if (!test_merges.len) + return + + var/list/out = list("
PRs test-merged for this round:
") + + for (var/TM in test_merges) + out += testmerge_short_overview(TM) + + out += "

" + + return out.Join() + +/datum/getrev/proc/generate_greeting_info() + if (!test_merges.len) + greeting_info = {"
+ There are currently no test merges loaded onto the server. +
"} + return + + var/list/out = list("

There are currently [test_merges.len] PRs being tested live.

", + {""} + ) + + for (var/TM in test_merges) + out += testmerge_long_oveview(TM) + + out += "
" + + greeting_info = out.Join() + +/datum/getrev/proc/testmerge_initialize() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + + if (api) + LOG_DEBUG("GETREV: TGS API found.") + test_merges = api.TestMerges() + LOG_DEBUG("GETREV: [test_merges.len] test merges found.") + else + LOG_DEBUG("GETREV: No TGS API found.") + test_merges = list() + + generate_greeting_info() + +/datum/getrev/proc/testmerge_short_overview(datum/tgs_revision_information/test_merge/tm) + . = list() + + . += "

PR #[tm.number]: \"[html_encode(tm.title)]\"" + . += "
\tAuthor: [html_encode(tm.author)]" + + if (GLOB.config.githuburl) + . += "
\t\[Details...\]" + + . += "

" + +/datum/getrev/proc/testmerge_long_oveview(datum/tgs_revision_information/test_merge/tm) + var/divid = "pr[tm.number]" + + . = list() + . += {""} + . += {"PR #[tm.number] - [html_encode(tm.title)]"} + . += {"
"} + . += {""} + . += {""} + + if (GLOB.config.githuburl) + . += {""} + + . += {""} + if(tm.comment) + . += {""} + . += {"
Author:[html_encode(tm.author)]
Link to GitHub
Description:[html_encode(tm.body)]
Comment:[html_encode(tm.comment)]
"} diff --git a/code/game/world.dm b/code/game/world.dm index 04cb86f3ad6..242e19e5a4a 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -89,7 +89,6 @@ GLOBAL_PROTECT(config) log_world("ERROR: Your server's byond version does not meet the recommended requirements for this server. Please update BYOND to [RECOMMENDED_VERSION].") TgsNew(new /datum/tgs_event_handler/impl, TGS_SECURITY_TRUSTED) - GLOB.revdata.load_tgs_info() GLOB.config.post_load()