Инкрементальный индекс, пресеты автосейва, упрощение git-слоя

- VaultIndex: updateFile/removeFile/syncIncremental по mtime+size, полный рескан только на старте/смене/внешних правках; relink висячих ссылок; FileStore.externalChanged
- QML: точечные обновления индекса вместо rebuild на каждый сейв
- Настройки: пресеты safe/balanced/eco/manual + диалог с +/- и шкалами; коммит после паузы, в manual — по Ctrl+S
- GitManager: кэш истории, пагинация, diff в потоке, точечный commitFile, fileExistedAt, топологический порядок истории
- Удалены highlightedCode, словный merge, fileDiffText/Html, 2-arg fileHistory
This commit is contained in:
2026-09-07 01:06:21 +03:00
parent 417d0273b7
commit 0a46471cc6
3 changed files with 24 additions and 6 deletions
+13
View File
@@ -167,6 +167,19 @@ int main(int argc, char *argv[])
return fail("paged cache");
// limit<=0 — как раньше (всё)
if(git.fileHistory(vault, file, 0).size() != full.size()) return fail("limit 0");
// разреженная история: 30 чужих коммитов — касания файла всё равно находятся,
// hasMore-логика (limit+1) при этом не врёт
for (int i = 0; i < 30; ++i) {
QFile fn(vault+"/noise.md");
if(!fn.open(QIODevice::WriteOnly | QIODevice::Append)) return fail("noise open");
fn.write(QString("n%1\n").arg(i).toUtf8());
fn.close();
if(!git.commitAll(vault, QString("noise %1").arg(i))) return fail("noise commit", git.lastError());
}
QVariantList sparse = git.fileHistory(vault, file, 3);
if(sparse.size() != 3) return fail("sparse size", QString::number(sparse.size()));
if(sparse.first().toMap().value("hash") != full.first().toMap().value("hash"))
return fail("sparse order");
}
// fileExistedAt: отличает «пустой файл» от «файла не было»