Упрощение git: только просмотр с diff, без словного уровня, render без побочек
- История: убран таб текстового diff — только Просмотр версии с подсветкой; пустые состояния через emptyMessage - GitManager: удалены fileDiffText/fileDiffHtml (+escHtml), остался fileContentAt/workdirContent/history/restore - MdParser: удалён словный merge (плейсхолдеры/tokenize/risiko), текст — отдельными del/add как diff; renderInner без сброса codeBlocks, render() — clear+renderInner; убраны save/restore хаки - Тесты обновлены
This commit is contained in:
@@ -66,14 +66,8 @@ int main(int argc, char *argv[])
|
||||
// content at
|
||||
QString c1 = git.fileContentAt(vault, file, hash1);
|
||||
if(!c1.contains("Версия 1")) return fail("content v1", c1);
|
||||
// diff с текущим (одинаково) должен быть "Нет изменений" или пусто?
|
||||
QString diffSame = git.fileDiffText(vault, file, hash1);
|
||||
if(diffSame != "Нет изменений" && !diffSame.isEmpty()) {
|
||||
// если файл не менялся, diff должен быть "Нет изменений"
|
||||
// Но мы ещё не меняли, так что должно быть нет изменений
|
||||
if(!diffSame.contains("Нет изменений"))
|
||||
return fail("diff same should be нет изменений", diffSame);
|
||||
}
|
||||
// workdirContent читает текущее с диска
|
||||
if(git.workdirContent(file) != "Версия 1\nСтрока A\n") return fail("workdirContent", git.workdirContent(file));
|
||||
|
||||
// Изменяем файл → v2
|
||||
QThread::msleep(1100); // чтобы время коммита отличалось
|
||||
@@ -95,12 +89,6 @@ int main(int argc, char *argv[])
|
||||
// content at hash1 всё ещё v1
|
||||
QString c1again = git.fileContentAt(vault, file, hash1);
|
||||
if(!c1again.contains("Версия 1") || c1again.contains("Строка B")) return fail("c1again", c1again);
|
||||
// diff hash1 vs current (v2): должен показать + строка B и -Версия1 +Версия2
|
||||
QString diff = git.fileDiffText(vault, file, hash1);
|
||||
if(!diff.contains("+") || !diff.contains("-")) return fail("diff should have + -", diff);
|
||||
if(!diff.contains("Версия 1") || !diff.contains("Версия 2")) return fail("diff contains versions", diff);
|
||||
QString diffHtml = git.fileDiffHtml(vault, file, hash1);
|
||||
if(!diffHtml.contains("34,197,94") || !diffHtml.contains("244,63,94")) return fail("diffHtml colors", diffHtml.left(500));
|
||||
|
||||
// forward/backward: добавляем ещё файл other.md, коммитим, история note.md не должна вырасти
|
||||
QString other = vault+"/other.md";
|
||||
@@ -140,18 +128,10 @@ int main(int argc, char *argv[])
|
||||
if(hist5.size()!=5) return fail("hist 5", QString::number(hist5.size()));
|
||||
if(hist5.first().toMap().value("message").toString()!="v3") return fail("top v3");
|
||||
|
||||
// Проверка что diff между v1 и текущим (v3) показывает изменения
|
||||
QString diffV1Now = git.fileDiffText(vault, file, hash1);
|
||||
if(!diffV1Now.contains("Версия 1") || !diffV1Now.contains("Версия 3")) return fail("diff v1->v3", diffV1Now);
|
||||
|
||||
// Проверка несуществующего коммита
|
||||
QString badContent = git.fileContentAt(vault, file, "0000000000000000000000000000000000000000");
|
||||
if(!badContent.isEmpty()) return fail("bad hash should return empty");
|
||||
|
||||
QString badDiff = git.fileDiffText(vault, file, "0000000000000000000000000000000000000000");
|
||||
// должен либо вернуть ошибку diff, либо содержать old empty
|
||||
// не проверяем строго
|
||||
|
||||
QString badRestore = git.restoreFile(vault, file, "0000000000000000000000000000000000000000");
|
||||
if(badRestore.isEmpty()) return fail("bad restore should fail");
|
||||
|
||||
|
||||
+9
-20
@@ -184,32 +184,21 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
// parseBlocksWithDiff: правка в обычном тексте — ОДИН блок со словным diff внутри
|
||||
// parseBlocksWithDiff: правка в обычном тексте — два отдельных tinted-блока
|
||||
// (del, затем add), как стандартный diff; словного уровня нет
|
||||
{
|
||||
const QString oldMd = "# T\n\nOld words here\n";
|
||||
const QString newMd = "# T\n\nNew words here\n";
|
||||
auto d = p.parseBlocksWithDiff(oldMd, newMd, vault, fileDir);
|
||||
if (d.size() != 2) return fail("text merge размер", QString::number(d.size()));
|
||||
if (d[0].toMap().value("change").toString() != "same") return fail("text merge[0] same");
|
||||
if (d[1].toMap().value("type").toString() != "html"
|
||||
|| d[1].toMap().value("change").toString() != "mod")
|
||||
return fail("text merge[1] должен быть html/mod", d[1].toMap().value("change").toString());
|
||||
const QString html = d[1].toMap().value("html").toString();
|
||||
if (!html.contains("244,63,94")) return fail("text merge без розового");
|
||||
if (!html.contains("34,197,94")) return fail("text merge без зелёного");
|
||||
if (!html.contains("Old") || !html.contains("New")) return fail("text merge потерял слова", html.left(300));
|
||||
if (!html.contains("words here")) return fail("text merge потерял общее", html.left(300));
|
||||
}
|
||||
|
||||
// parseBlocksWithDiff: ссылка поменялась — fallback на два отдельных блока (разметку не рвём)
|
||||
{
|
||||
const QString oldMd = "# T\n\n[a](http://old.com/x)\n";
|
||||
const QString newMd = "# T\n\n[a](http://new.com/x)\n";
|
||||
auto d = p.parseBlocksWithDiff(oldMd, newMd, vault, fileDir);
|
||||
if (d.size() != 3) return fail("link fallback размер", QString::number(d.size()));
|
||||
if (d.size() != 3) return fail("text diff размер", QString::number(d.size()));
|
||||
if (d[0].toMap().value("change").toString() != "same") return fail("text diff[0] same");
|
||||
if (d[1].toMap().value("change").toString() != "del"
|
||||
|| d[2].toMap().value("change").toString() != "add")
|
||||
return fail("link fallback del/add");
|
||||
return fail("text diff del/add");
|
||||
if (!d[1].toMap().value("html").toString().contains("244,63,94"))
|
||||
return fail("text del без розового");
|
||||
if (!d[2].toMap().value("html").toString().contains("34,197,94"))
|
||||
return fail("text add без зелёного");
|
||||
}
|
||||
|
||||
// parseBlocksWithDiff: правка внутри кода — ОДИН блок с построчным diff внутри
|
||||
|
||||
Reference in New Issue
Block a user