Merge branch 'develop' into windows

This commit is contained in:
Alexander Zhirov 2025-06-02 18:07:55 +03:00
commit 860bea587d
Signed by: alexander
GPG key ID: C8D8BE544A27C511
4 changed files with 25 additions and 15 deletions

View file

@ -237,7 +237,9 @@ int main(string[] args)
return EXIT_FAILURE;
} catch (Exception e) {
writeln(
"AN UNEXPECTED ERROR HAS OCCURRED! PLEASE REPORT IT TO THE AUTHOR OF THE SNAG!\n\n",
"AN UNEXPECTED ERROR HAS OCCURRED!\n",
"PLEASE REPORT IT TO THE AUTHOR OF THE SNAG: ",
"alexander@zhirov.kz (Alexander Zhirov)\n\n",
e
);
return EXIT_FAILURE;

View file

@ -22,8 +22,8 @@ class Snag {
this(SnagConfig config) {
_baseCommand = format(
"git --git-dir=%s --work-tree=%s",
config.git, config.project
"git -C %s --git-dir=%s --work-tree=%s",
config.project, config.git, config.project
).split();
_config = config;
@ -131,7 +131,7 @@ class Snag {
}
writeln("The following list of files requires backup:");
result.output.split('\n')[0..$-1].map!(e =>
e.strip.split
e.strip.splitByFirstSpace
).each!(e =>
writefln("\t%s\t/%s", gitStatus(e[0], true), e[1])
);
@ -158,7 +158,7 @@ class Snag {
result = execute(_baseCommand ~ ["rev-parse", "--short", "HEAD"]);
if (result.status == 128) {
// Если это самый первый коммит после инициализации репозитория
git(["add", "."], "Failed to prepare files for archiving");
git(["add", _config.project], "Failed to prepare files for archiving");
git(["commit", "-m"] ~ message, "Failed to create a snapshot");
newSnapshot = git(
["rev-parse", "--short", "HEAD"],
@ -197,7 +197,7 @@ class Snag {
"Failed to create a branch from the current state"
);
git(
["add", "."],
["add", _config.project],
"Failed to prepare files for archiving"
);
git(
@ -211,7 +211,7 @@ class Snag {
} else {
// Если коммит является посленим в ветке
git(
["add", "."],
["add", _config.project],
"Failed to prepare files for archiving"
);
git(
@ -250,7 +250,7 @@ class Snag {
[
"log",
"--all",
"--date=format:%Y.%m.%d %H:%M",
"--date=format:%Y.%m.%d %H:%M:%S",
"--pretty=" ~ format
],
"Failed to retrieve the list of snapshots"
@ -273,7 +273,7 @@ class Snag {
);
if (result.output.length) {
git(
["restore", "."],
["restore", _config.project],
"Failed to reset file changes state"
);
git(
@ -381,8 +381,8 @@ class Snag {
// Выполнение git команд относительно распакованного архива
string[] customCommand = format(
"git --git-dir=%s --work-tree=%s",
_config.git, tempDirectory
"git -C %s --git-dir=%s --work-tree=%s",
tempDirectory, _config.git, tempDirectory
).split();
// Необходимо проверить, что текущее состояние файлов не идентично файлам распакованного архива
@ -406,7 +406,7 @@ class Snag {
);
// Создание нового снимка на основе состояния файлов из распакованного архива
result = execute(customCommand ~ ["add", "."]);
result = execute(customCommand ~ ["add", tempDirectory]);
result.status &&
throw new SnagException(
"Failed to prepare files for archiving:\n"
@ -427,7 +427,7 @@ class Snag {
// Сброс состояния файлов
git(
["restore", "."],
["restore", _config.project],
"Failed to reset file changes state"
);
git(

View file

@ -75,8 +75,8 @@ class SnagRules {
_gitignoreBak = _gitignore ~ ".bak";
_baseCommand = format(
"git --git-dir=%s --work-tree=%s",
config.git, config.project
"git -C %s --git-dir=%s --work-tree=%s",
config.project, config.git, config.project
).split();
generate();

View file

@ -2,6 +2,8 @@ module snag.lib.lib;
import std.regex;
import std.process;
import std.algorithm;
import std.string;
bool isValidHash(string hash) {
auto hashPattern = ctRegex!r"^[a-fA-F0-9]{7}$";
@ -17,3 +19,9 @@ bool checkGit() {
auto result = execute(["which", "git"]);
return !result.status;
}
string[] splitByFirstSpace(string line) {
auto spaceIndex = line.indexOf(' ');
return spaceIndex == -1 ?
[line] : [line[0 .. spaceIndex], line[spaceIndex + 1..$]];
}