Добавлен модуль ядра программы
This commit is contained in:
		
							parent
							
								
									ff9dd8757d
								
							
						
					
					
						commit
						66d64a9642
					
				
					 3 changed files with 113 additions and 0 deletions
				
			
		
							
								
								
									
										109
									
								
								source/snapd/core/core.d
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								source/snapd/core/core.d
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,109 @@
 | 
				
			||||||
 | 
					module snapd.core.core;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import snapd.config;
 | 
				
			||||||
 | 
					import std.format;
 | 
				
			||||||
 | 
					import std.stdio;
 | 
				
			||||||
 | 
					import std.array;
 | 
				
			||||||
 | 
					import std.exception;
 | 
				
			||||||
 | 
					import std.process;
 | 
				
			||||||
 | 
					import std.algorithm;
 | 
				
			||||||
 | 
					import std.string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SnapdException : Exception {
 | 
				
			||||||
 | 
						this(string msg, string file = __FILE__, size_t line = __LINE__) {
 | 
				
			||||||
 | 
							super(msg, file, line);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void print() {
 | 
				
			||||||
 | 
							writeln(msg);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Snapd {
 | 
				
			||||||
 | 
						private string[] _baseCommand;
 | 
				
			||||||
 | 
						private SnapdConfig _config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						this(SnapdConfig config) {
 | 
				
			||||||
 | 
							_baseCommand = format(
 | 
				
			||||||
 | 
								"git --git-dir=%s --work-tree=%s",
 | 
				
			||||||
 | 
								config.git, config.project
 | 
				
			||||||
 | 
							).split();
 | 
				
			||||||
 | 
							_config = config;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void initialize() {
 | 
				
			||||||
 | 
							auto result = execute(_baseCommand ~ "init");
 | 
				
			||||||
 | 
							if (result.status)
 | 
				
			||||||
 | 
								throw new SnapdException(
 | 
				
			||||||
 | 
									"A Git repository initialization error occurred:\n"
 | 
				
			||||||
 | 
									~ result.output
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							result = execute(
 | 
				
			||||||
 | 
								_baseCommand ~ ["config", "user.email", _config.email]
 | 
				
			||||||
 | 
							);
 | 
				
			||||||
 | 
							if (result.status)
 | 
				
			||||||
 | 
								throw new SnapdException(
 | 
				
			||||||
 | 
									"A Git repository initialization error occurred:\n"
 | 
				
			||||||
 | 
									~ result.output
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							result = execute(
 | 
				
			||||||
 | 
								_baseCommand ~ ["config", "user.name", _config.user]
 | 
				
			||||||
 | 
							);
 | 
				
			||||||
 | 
							if (result.status)
 | 
				
			||||||
 | 
								throw new SnapdException(
 | 
				
			||||||
 | 
									"A Git repository initialization error occurred:\n"
 | 
				
			||||||
 | 
									~ result.output
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							writeln(
 | 
				
			||||||
 | 
								"The Git repository has been initialized successfully: "
 | 
				
			||||||
 | 
								~ _config.git
 | 
				
			||||||
 | 
							);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void status() {
 | 
				
			||||||
 | 
							auto result = execute(
 | 
				
			||||||
 | 
								_baseCommand ~ ["status", "--porcelain"]
 | 
				
			||||||
 | 
							);
 | 
				
			||||||
 | 
							if (result.status)
 | 
				
			||||||
 | 
								throw new SnapdException(
 | 
				
			||||||
 | 
									"An error occurred while checking the file tracking status:\n"
 | 
				
			||||||
 | 
									~ result.output
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							writeln("The following list of files requires backup:");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							Цепочка выполняет разбивку по переводу на новую строку,
 | 
				
			||||||
 | 
							отсеивает пустые строки, перебирает в цикле имеющиеся строки,
 | 
				
			||||||
 | 
							выводит только вторую часть строки (разделенную по пробелу)
 | 
				
			||||||
 | 
							*/
 | 
				
			||||||
 | 
							result.output.split('\n').filter!(e => !e.strip.empty).each!((e) {
 | 
				
			||||||
 | 
								writefln("\t/%s", e.strip.split[1]);
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void create() {
 | 
				
			||||||
 | 
							auto result = execute(
 | 
				
			||||||
 | 
								_baseCommand ~ ["add", "."]
 | 
				
			||||||
 | 
							);
 | 
				
			||||||
 | 
							if (result.status)
 | 
				
			||||||
 | 
								throw new SnapdException(
 | 
				
			||||||
 | 
									"Failed to prepare files for archiving:\n"
 | 
				
			||||||
 | 
									~ result.output
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							result = execute(
 | 
				
			||||||
 | 
								_baseCommand ~ ["commit", "-m", "test"]
 | 
				
			||||||
 | 
							);
 | 
				
			||||||
 | 
							if (result.status)
 | 
				
			||||||
 | 
								throw new SnapdException(
 | 
				
			||||||
 | 
									"Failed to create a backup:\n"
 | 
				
			||||||
 | 
									~ result.output
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							writeln("Backup was created successfully");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										3
									
								
								source/snapd/core/package.d
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								source/snapd/core/package.d
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					module snapd.core;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public import snapd.core.core;
 | 
				
			||||||
| 
						 | 
					@ -2,3 +2,4 @@ module snapd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public import snapd.version_;
 | 
					public import snapd.version_;
 | 
				
			||||||
public import snapd.config;
 | 
					public import snapd.config;
 | 
				
			||||||
 | 
					public import snapd.core;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue