| 
									
										
										
										
											2019-09-04 16:47:26 +05:30
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  editor_vcs_interface.h                                               */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							|  |  |  | /*                      https://godotengine.org                          */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2022-01-03 21:27:34 +01:00
										 |  |  | /* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							|  |  |  | /* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md).   */ | 
					
						
							| 
									
										
										
										
											2019-09-04 16:47:26 +05:30
										 |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the       */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including   */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,   */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to    */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to */ | 
					
						
							|  |  |  | /* the following conditions:                                             */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be        */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.       */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-03 20:01:14 +05:30
										 |  |  | #ifndef EDITOR_VCS_INTERFACE_H
 | 
					
						
							|  |  |  | #define EDITOR_VCS_INTERFACE_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-07 19:33:38 -03:00
										 |  |  | #include "core/object/class_db.h"
 | 
					
						
							| 
									
										
										
										
											2022-06-14 00:17:40 +05:30
										 |  |  | #include "core/object/gdvirtual.gen.inc"
 | 
					
						
							|  |  |  | #include "core/object/script_language_extension.h"
 | 
					
						
							| 
									
										
										
										
											2020-11-07 19:33:38 -03:00
										 |  |  | #include "core/string/ustring.h"
 | 
					
						
							| 
									
										
										
										
											2022-06-14 00:17:40 +05:30
										 |  |  | #include "core/variant/type_info.h"
 | 
					
						
							| 
									
										
										
										
											2019-09-03 20:01:14 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | class EditorVCSInterface : public Object { | 
					
						
							|  |  |  | 	GDCLASS(EditorVCSInterface, Object) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-14 00:17:40 +05:30
										 |  |  | public: | 
					
						
							|  |  |  | 	enum ChangeType { | 
					
						
							|  |  |  | 		CHANGE_TYPE_NEW = 0, | 
					
						
							|  |  |  | 		CHANGE_TYPE_MODIFIED = 1, | 
					
						
							|  |  |  | 		CHANGE_TYPE_RENAMED = 2, | 
					
						
							|  |  |  | 		CHANGE_TYPE_DELETED = 3, | 
					
						
							|  |  |  | 		CHANGE_TYPE_TYPECHANGE = 4, | 
					
						
							|  |  |  | 		CHANGE_TYPE_UNMERGED = 5 | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	enum TreeArea { | 
					
						
							|  |  |  | 		TREE_AREA_COMMIT = 0, | 
					
						
							|  |  |  | 		TREE_AREA_STAGED = 1, | 
					
						
							|  |  |  | 		TREE_AREA_UNSTAGED = 2 | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct DiffLine { | 
					
						
							|  |  |  | 		int new_line_no; | 
					
						
							|  |  |  | 		int old_line_no; | 
					
						
							|  |  |  | 		String content; | 
					
						
							|  |  |  | 		String status; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		String old_text; | 
					
						
							|  |  |  | 		String new_text; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct DiffHunk { | 
					
						
							|  |  |  | 		int new_start; | 
					
						
							|  |  |  | 		int old_start; | 
					
						
							|  |  |  | 		int new_lines; | 
					
						
							|  |  |  | 		int old_lines; | 
					
						
							|  |  |  | 		List<DiffLine> diff_lines; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct DiffFile { | 
					
						
							|  |  |  | 		String new_file; | 
					
						
							|  |  |  | 		String old_file; | 
					
						
							|  |  |  | 		List<DiffHunk> diff_hunks; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct Commit { | 
					
						
							|  |  |  | 		String author; | 
					
						
							|  |  |  | 		String msg; | 
					
						
							|  |  |  | 		String id; | 
					
						
							|  |  |  | 		int64_t unix_timestamp; | 
					
						
							|  |  |  | 		int64_t offset_minutes; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct StatusFile { | 
					
						
							|  |  |  | 		TreeArea area; | 
					
						
							|  |  |  | 		ChangeType change_type; | 
					
						
							|  |  |  | 		String file_path; | 
					
						
							|  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2019-09-03 20:01:14 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | protected: | 
					
						
							|  |  |  | 	static EditorVCSInterface *singleton; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	static void _bind_methods(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-14 00:17:40 +05:30
										 |  |  | 	DiffLine _convert_diff_line(Dictionary p_diff_line); | 
					
						
							|  |  |  | 	DiffHunk _convert_diff_hunk(Dictionary p_diff_hunk); | 
					
						
							|  |  |  | 	DiffFile _convert_diff_file(Dictionary p_diff_file); | 
					
						
							|  |  |  | 	Commit _convert_commit(Dictionary p_commit); | 
					
						
							|  |  |  | 	StatusFile _convert_status_file(Dictionary p_status_file); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Proxy endpoints for extensions to implement
 | 
					
						
							|  |  |  | 	GDVIRTUAL1R(bool, _initialize, String); | 
					
						
							|  |  |  | 	GDVIRTUAL5(_set_credentials, String, String, String, String, String); | 
					
						
							| 
									
										
										
										
											2022-08-31 19:24:04 +02:00
										 |  |  | 	GDVIRTUAL0R(TypedArray<Dictionary>, _get_modified_files_data); | 
					
						
							| 
									
										
										
										
											2022-06-14 00:17:40 +05:30
										 |  |  | 	GDVIRTUAL1(_stage_file, String); | 
					
						
							|  |  |  | 	GDVIRTUAL1(_unstage_file, String); | 
					
						
							|  |  |  | 	GDVIRTUAL1(_discard_file, String); | 
					
						
							|  |  |  | 	GDVIRTUAL1(_commit, String); | 
					
						
							|  |  |  | 	GDVIRTUAL2R(TypedArray<Dictionary>, _get_diff, String, int); | 
					
						
							|  |  |  | 	GDVIRTUAL0R(bool, _shut_down); | 
					
						
							|  |  |  | 	GDVIRTUAL0R(String, _get_vcs_name); | 
					
						
							| 
									
										
										
										
											2022-08-31 19:24:04 +02:00
										 |  |  | 	GDVIRTUAL1R(TypedArray<Dictionary>, _get_previous_commits, int); | 
					
						
							| 
									
										
										
										
											2022-12-20 15:36:14 +05:30
										 |  |  | 	GDVIRTUAL0R(TypedArray<String>, _get_branch_list); | 
					
						
							|  |  |  | 	GDVIRTUAL0R(TypedArray<String>, _get_remotes); | 
					
						
							| 
									
										
										
										
											2022-06-14 00:17:40 +05:30
										 |  |  | 	GDVIRTUAL1(_create_branch, String); | 
					
						
							|  |  |  | 	GDVIRTUAL1(_remove_branch, String); | 
					
						
							|  |  |  | 	GDVIRTUAL2(_create_remote, String, String); | 
					
						
							|  |  |  | 	GDVIRTUAL1(_remove_remote, String); | 
					
						
							|  |  |  | 	GDVIRTUAL0R(String, _get_current_branch_name); | 
					
						
							|  |  |  | 	GDVIRTUAL1R(bool, _checkout_branch, String); | 
					
						
							|  |  |  | 	GDVIRTUAL1(_pull, String); | 
					
						
							|  |  |  | 	GDVIRTUAL2(_push, String, bool); | 
					
						
							|  |  |  | 	GDVIRTUAL1(_fetch, String); | 
					
						
							| 
									
										
										
										
											2022-08-31 19:24:04 +02:00
										 |  |  | 	GDVIRTUAL2R(TypedArray<Dictionary>, _get_line_diff, String, String); | 
					
						
							| 
									
										
										
										
											2019-09-03 20:01:14 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	static EditorVCSInterface *get_singleton(); | 
					
						
							|  |  |  | 	static void set_singleton(EditorVCSInterface *p_singleton); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-29 15:01:26 -04:00
										 |  |  | 	enum class VCSMetadata { | 
					
						
							|  |  |  | 		NONE, | 
					
						
							|  |  |  | 		GIT, | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 	static void create_vcs_metadata_files(VCSMetadata p_vcs_metadata_type, String &p_dir); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-14 00:17:40 +05:30
										 |  |  | 	// Proxies to the editor for use
 | 
					
						
							|  |  |  | 	bool initialize(String p_project_path); | 
					
						
							|  |  |  | 	void set_credentials(String p_username, String p_password, String p_ssh_public_key_path, String p_ssh_private_key_path, String p_ssh_passphrase); | 
					
						
							|  |  |  | 	List<StatusFile> get_modified_files_data(); | 
					
						
							| 
									
										
										
										
											2019-09-03 20:01:14 +05:30
										 |  |  | 	void stage_file(String p_file_path); | 
					
						
							|  |  |  | 	void unstage_file(String p_file_path); | 
					
						
							| 
									
										
										
										
											2022-06-14 00:17:40 +05:30
										 |  |  | 	void discard_file(String p_file_path); | 
					
						
							| 
									
										
										
										
											2019-09-03 20:01:14 +05:30
										 |  |  | 	void commit(String p_msg); | 
					
						
							| 
									
										
										
										
											2022-06-14 00:17:40 +05:30
										 |  |  | 	List<DiffFile> get_diff(String p_identifier, TreeArea p_area); | 
					
						
							| 
									
										
										
										
											2019-09-03 20:01:14 +05:30
										 |  |  | 	bool shut_down(); | 
					
						
							|  |  |  | 	String get_vcs_name(); | 
					
						
							| 
									
										
										
										
											2022-06-14 00:17:40 +05:30
										 |  |  | 	List<Commit> get_previous_commits(int p_max_commits); | 
					
						
							|  |  |  | 	List<String> get_branch_list(); | 
					
						
							|  |  |  | 	List<String> get_remotes(); | 
					
						
							|  |  |  | 	void create_branch(String p_branch_name); | 
					
						
							|  |  |  | 	void remove_branch(String p_branch_name); | 
					
						
							|  |  |  | 	void create_remote(String p_remote_name, String p_remote_url); | 
					
						
							|  |  |  | 	void remove_remote(String p_remote_name); | 
					
						
							|  |  |  | 	String get_current_branch_name(); | 
					
						
							|  |  |  | 	bool checkout_branch(String p_branch_name); | 
					
						
							|  |  |  | 	void pull(String p_remote); | 
					
						
							|  |  |  | 	void push(String p_remote, bool p_force); | 
					
						
							|  |  |  | 	void fetch(String p_remote); | 
					
						
							|  |  |  | 	List<DiffHunk> get_line_diff(String p_file_path, String p_text); | 
					
						
							| 
									
										
										
										
											2019-09-03 20:01:14 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-14 00:17:40 +05:30
										 |  |  | 	// Helper functions to create and convert Dictionary into data structures
 | 
					
						
							|  |  |  | 	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_file(String p_new_file, String p_old_file); | 
					
						
							|  |  |  | 	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); | 
					
						
							| 
									
										
										
										
											2022-08-31 19:24:04 +02:00
										 |  |  | 	Dictionary add_line_diffs_into_diff_hunk(Dictionary p_diff_hunk, TypedArray<Dictionary> p_line_diffs); | 
					
						
							|  |  |  | 	Dictionary add_diff_hunks_into_diff_file(Dictionary p_diff_file, TypedArray<Dictionary> p_diff_hunks); | 
					
						
							| 
									
										
										
										
											2022-06-14 00:17:40 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | 	void popup_error(String p_msg); | 
					
						
							| 
									
										
										
										
											2019-09-03 20:01:14 +05:30
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-14 00:17:40 +05:30
										 |  |  | VARIANT_ENUM_CAST(EditorVCSInterface::ChangeType); | 
					
						
							|  |  |  | VARIANT_ENUM_CAST(EditorVCSInterface::TreeArea); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-10 03:26:19 +05:30
										 |  |  | #endif // EDITOR_VCS_INTERFACE_H
 |