Добавлен модуль ядра программы
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.config;
 | 
			
		||||
public import snapd.core;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue