Merge pull request #58479 from ChronicallySerious/use-time-in-vcs

Use Time singleton in VersionControlEditorPlugin
This commit is contained in:
Rémi Verschelde 2022-03-18 20:34:56 +01:00 committed by GitHub
commit cec7fc4ffe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 27 additions and 11 deletions

View file

@ -193,9 +193,10 @@
<argument index="0" name="msg" type="String" /> <argument index="0" name="msg" type="String" />
<argument index="1" name="author" type="String" /> <argument index="1" name="author" type="String" />
<argument index="2" name="id" type="String" /> <argument index="2" name="id" type="String" />
<argument index="3" name="date" type="String" /> <argument index="3" name="unix_timestamp" type="int" />
<argument index="4" name="offset_minutes" type="int" />
<description> <description>
Helper function to create a commit [Dictionary] item. [code]msg[/code] is the commit message of the commit. [code]author[/code] is a human-readable string containing the author's details, e.g. the email and name configured in the VCS. [code]id[/code] is the identifier of the commit, in whichever format your VCS may provide an identifier to commits. [code]date[/code] is directly added to the commit item and displayed in the editor, and hence, it shall be a well-formatted, human-readable date string. Helper function to create a commit [Dictionary] item. [code]msg[/code] is the commit message of the commit. [code]author[/code] is a single human-readable string containing all the author's details, e.g. the email and name configured in the VCS. [code]id[/code] is the identifier of the commit, in whichever format your VCS may provide an identifier to commits. [code]unix_timestamp[/code] is the UTC Unix timestamp of when the commit was created. [code]offset_minutes[/code] is the timezone offset in minutes, recorded from the system timezone where the commit was created.
</description> </description>
</method> </method>
<method name="create_diff_file"> <method name="create_diff_file">

View file

@ -206,11 +206,12 @@ Dictionary EditorVCSInterface::create_diff_file(String p_new_file, String p_old_
return file_diff; return file_diff;
} }
Dictionary EditorVCSInterface::create_commit(String p_msg, String p_author, String p_id, String p_date) { Dictionary EditorVCSInterface::create_commit(String p_msg, String p_author, String p_id, int64_t p_unix_timestamp, int64_t p_offset_minutes) {
Dictionary commit_info; Dictionary commit_info;
commit_info["message"] = p_msg; commit_info["message"] = p_msg;
commit_info["author"] = p_author; commit_info["author"] = p_author;
commit_info["date"] = p_date; commit_info["unix_timestamp"] = p_unix_timestamp;
commit_info["offset_minutes"] = p_offset_minutes;
commit_info["id"] = p_id; commit_info["id"] = p_id;
return commit_info; return commit_info;
} }
@ -267,7 +268,8 @@ EditorVCSInterface::Commit EditorVCSInterface::_convert_commit(Dictionary p_comm
EditorVCSInterface::Commit c; EditorVCSInterface::Commit c;
c.msg = p_commit["message"]; c.msg = p_commit["message"];
c.author = p_commit["author"]; c.author = p_commit["author"];
c.date = p_commit["date"]; c.unix_timestamp = p_commit["unix_timestamp"];
c.offset_minutes = p_commit["offset_minutes"];
c.id = p_commit["id"]; c.id = p_commit["id"];
return c; return c;
} }
@ -309,7 +311,7 @@ void EditorVCSInterface::_bind_methods() {
ClassDB::bind_method(D_METHOD("create_diff_line", "new_line_no", "old_line_no", "content", "status"), &EditorVCSInterface::create_diff_line); ClassDB::bind_method(D_METHOD("create_diff_line", "new_line_no", "old_line_no", "content", "status"), &EditorVCSInterface::create_diff_line);
ClassDB::bind_method(D_METHOD("create_diff_hunk", "old_start", "new_start", "old_lines", "new_lines"), &EditorVCSInterface::create_diff_hunk); ClassDB::bind_method(D_METHOD("create_diff_hunk", "old_start", "new_start", "old_lines", "new_lines"), &EditorVCSInterface::create_diff_hunk);
ClassDB::bind_method(D_METHOD("create_diff_file", "new_file", "old_file"), &EditorVCSInterface::create_diff_file); ClassDB::bind_method(D_METHOD("create_diff_file", "new_file", "old_file"), &EditorVCSInterface::create_diff_file);
ClassDB::bind_method(D_METHOD("create_commit", "msg", "author", "id", "date"), &EditorVCSInterface::create_commit); ClassDB::bind_method(D_METHOD("create_commit", "msg", "author", "id", "unix_timestamp", "offset_minutes"), &EditorVCSInterface::create_commit);
ClassDB::bind_method(D_METHOD("create_status_file", "file_path", "change_type", "area"), &EditorVCSInterface::create_status_file); ClassDB::bind_method(D_METHOD("create_status_file", "file_path", "change_type", "area"), &EditorVCSInterface::create_status_file);
ClassDB::bind_method(D_METHOD("add_diff_hunks_into_diff_file", "diff_file", "diff_hunks"), &EditorVCSInterface::add_diff_hunks_into_diff_file); ClassDB::bind_method(D_METHOD("add_diff_hunks_into_diff_file", "diff_file", "diff_hunks"), &EditorVCSInterface::add_diff_hunks_into_diff_file);
ClassDB::bind_method(D_METHOD("add_line_diffs_into_diff_hunk", "diff_hunk", "line_diffs"), &EditorVCSInterface::add_line_diffs_into_diff_hunk); ClassDB::bind_method(D_METHOD("add_line_diffs_into_diff_hunk", "diff_hunk", "line_diffs"), &EditorVCSInterface::add_line_diffs_into_diff_hunk);

View file

@ -82,7 +82,8 @@ public:
String author; String author;
String msg; String msg;
String id; String id;
String date; int64_t unix_timestamp;
int64_t offset_minutes;
}; };
struct StatusFile { struct StatusFile {
@ -135,7 +136,7 @@ public:
Dictionary create_diff_line(int p_new_line_no, int p_old_line_no, String p_content, String p_status); Dictionary create_diff_line(int p_new_line_no, int p_old_line_no, String p_content, String p_status);
Dictionary create_diff_hunk(int p_old_start, int p_new_start, int p_old_lines, int p_new_lines); Dictionary create_diff_hunk(int p_old_start, int p_new_start, int p_old_lines, int p_new_lines);
Dictionary create_diff_file(String p_new_file, String p_old_file); Dictionary create_diff_file(String p_new_file, String p_old_file);
Dictionary create_commit(String p_msg, String p_author, String p_id, String p_date); Dictionary create_commit(String p_msg, String p_author, String p_id, int64_t p_unix_timestamp, int64_t p_offset_minutes);
Dictionary create_status_file(String p_file_path, ChangeType p_change, TreeArea p_area); Dictionary create_status_file(String p_file_path, ChangeType p_change, TreeArea p_area);
Dictionary add_line_diffs_into_diff_hunk(Dictionary p_diff_hunk, Array p_line_diffs); Dictionary add_line_diffs_into_diff_hunk(Dictionary p_diff_hunk, Array p_line_diffs);
Dictionary add_diff_hunks_into_diff_file(Dictionary p_diff_file, Array p_diff_hunks); Dictionary add_diff_hunks_into_diff_file(Dictionary p_diff_file, Array p_diff_hunks);

View file

@ -32,6 +32,7 @@
#include "core/bind/core_bind.h" #include "core/bind/core_bind.h"
#include "core/os/keyboard.h" #include "core/os/keyboard.h"
#include "core/os/time.h"
#include "core/script_language.h" #include "core/script_language.h"
#include "editor/editor_file_system.h" #include "editor/editor_file_system.h"
#include "editor/editor_node.h" #include "editor/editor_node.h"
@ -232,6 +233,13 @@ void VersionControlEditorPlugin::_refresh_branch_list() {
} }
} }
String VersionControlEditorPlugin::_get_date_string_from(int64_t p_unix_timestamp, int64_t p_offset_minutes) const {
return vformat(
"%s %s",
Time::get_singleton()->get_datetime_string_from_unix_time(p_unix_timestamp + p_offset_minutes * 60, true),
Time::get_singleton()->get_offset_string_from_offset_minutes(p_offset_minutes));
}
void VersionControlEditorPlugin::_refresh_commit_list() { void VersionControlEditorPlugin::_refresh_commit_list() {
CHECK_PLUGIN_INITIALIZED(); CHECK_PLUGIN_INITIALIZED();
@ -246,16 +254,18 @@ void VersionControlEditorPlugin::_refresh_commit_list() {
// Only display the first line of a commit message // Only display the first line of a commit message
int line_ending = commit.msg.find_char('\n'); int line_ending = commit.msg.find_char('\n');
String commit_display_msg = commit.msg.substr(0, line_ending); String commit_display_msg = commit.msg.substr(0, line_ending);
String commit_date_string = _get_date_string_from(commit.unix_timestamp, commit.offset_minutes);
Dictionary meta_data; Dictionary meta_data;
meta_data["commit_id"] = commit.id; meta_data["commit_id"] = commit.id;
meta_data["commit_title"] = commit_display_msg; meta_data["commit_title"] = commit_display_msg;
meta_data["commit_subtitle"] = commit.msg.substr(line_ending).strip_edges(); meta_data["commit_subtitle"] = commit.msg.substr(line_ending).strip_edges();
meta_data["commit_date"] = commit.date; meta_data["commit_unix_timestamp"] = commit.unix_timestamp;
meta_data["commit_author"] = commit.author; meta_data["commit_author"] = commit.author;
meta_data["commit_date_string"] = commit_date_string;
item->set_text(0, commit_display_msg); item->set_text(0, commit_display_msg);
item->set_text(1, commit.date.strip_edges()); item->set_text(1, commit_date_string);
item->set_text(2, commit.author.strip_edges()); item->set_text(2, commit.author.strip_edges());
item->set_metadata(0, meta_data); item->set_metadata(0, meta_data);
} }
@ -591,12 +601,13 @@ void VersionControlEditorPlugin::_display_diff(int p_idx) {
String commit_subtitle = meta_data["commit_subtitle"]; String commit_subtitle = meta_data["commit_subtitle"];
String commit_date = meta_data["commit_date"]; String commit_date = meta_data["commit_date"];
String commit_author = meta_data["commit_author"]; String commit_author = meta_data["commit_author"];
String commit_date_string = meta_data["commit_date_string"];
diff->push_font(EditorNode::get_singleton()->get_gui_base()->get_font("doc_bold", "EditorFonts")); diff->push_font(EditorNode::get_singleton()->get_gui_base()->get_font("doc_bold", "EditorFonts"));
diff->push_color(EditorNode::get_singleton()->get_gui_base()->get_color("accent_color", "Editor")); diff->push_color(EditorNode::get_singleton()->get_gui_base()->get_color("accent_color", "Editor"));
diff->add_text(TTR("Commit:") + " " + commit_id + "\n"); diff->add_text(TTR("Commit:") + " " + commit_id + "\n");
diff->add_text(TTR("Author:") + " " + commit_author + "\n"); diff->add_text(TTR("Author:") + " " + commit_author + "\n");
diff->add_text(TTR("Date:") + " " + commit_date + "\n"); diff->add_text(TTR("Date:") + " " + commit_date_string + "\n");
if (!commit_subtitle.empty()) { if (!commit_subtitle.empty()) {
diff->add_text(TTR("Subtitle:") + " " + commit_subtitle + "\n"); diff->add_text(TTR("Subtitle:") + " " + commit_subtitle + "\n");
} }

View file

@ -186,6 +186,7 @@ private:
void _commit_message_gui_input(const Ref<InputEvent> &p_event); void _commit_message_gui_input(const Ref<InputEvent> &p_event);
void _extra_option_selected(int p_index); void _extra_option_selected(int p_index);
bool _is_staging_area_empty(); bool _is_staging_area_empty();
String _get_date_string_from(int64_t p_unix_timestamp, int64_t p_offset_minutes) const;
friend class EditorVCSInterface; friend class EditorVCSInterface;