feat(vcs): correct Git log graph projection and expand history views (#1076)

Git Log could lose commits when filtering by several paths, draw wrong
ancestry after filtering or collapsing rows, and open the wrong
repository in multi-root views. The graph is now projected over the full
commit DAG and laid out in Bek order, so filtered and collapsed views keep
the real ancestry; each log view keeps its own filters and requests.

Commit metadata, messages and path changes are kept in a persistent index
(by object id, in the IDE's cache directory) with seekable paging, and the
log gains parent-aware merge comparisons, a lazy revision browser,
read-only logs of repositories outside the project (opened with command
execution disabled), commit bookmarks, configurable built-in columns and
batched commit details. The adapted IntelliJ algorithms are attributed in
THIRD_PARTY_LICENSES.md.

Closes #872

Co-authored-by: shohruh-genius <[email protected]>
Цей коміт міститься в:
Shohruh Ismoilovтаshohruh-genius authored and GitHub committed 2026-11-05 02:31:32 +08:00
1 джерело 2d20e5a203
коміт 9f2e6b570f
62 files changed
+7473 -881

No files matched your search

+65
Переглянути файл
@@ -139,12 +139,23 @@
/* commit table */
.listWrap {
position: relative;
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
min-width: 0;
}
.speedSearch {
position: absolute;
top: 4px;
right: 8px;
z-index: 1;
padding: 4px 8px;
background: var(--bg-popup);
border: 1px solid var(--border);
color: var(--fg);
}
.list {
flex: 1;
min-height: 0;
@@ -165,6 +176,39 @@
cursor: default;
font-size: var(--fs-ui);
}
.columnHeader {
position: sticky;
top: 0;
z-index: 2;
background: var(--bg-app);
border-bottom: 1px solid var(--border);
color: var(--fg-subtle);
}
.columnHeader:hover {
background: var(--bg-app);
}
.columnCell {
flex: none;
overflow: hidden;
text-overflow: ellipsis;
}
.columnHeading {
position: relative;
padding-inline-end: 6px;
cursor: grab;
}
.columnResize {
position: absolute;
inset-block: 0;
inset-inline-end: 0;
width: 6px;
cursor: col-resize;
touch-action: none;
}
.columnResize:focus-visible {
outline: 2px solid var(--focus-ring);
outline-offset: -2px;
}
/* View Options › Highlight › Current Branch: commits reachable from HEAD are tinted. */
.currentBranch {
--log-row-bg: var(--bg-log-current-branch);
@@ -342,6 +386,21 @@
user-select: text;
font-size: var(--fs-ui);
}
.commitTooltip {
width: min(520px, calc(100vw - 32px));
max-height: 60vh;
overflow: auto;
padding: 12px;
white-space: normal;
user-select: text;
}
.revisionSource {
flex: 1;
min-height: 0;
height: 100%;
display: flex;
flex-direction: column;
}
.subjectLine {
color: var(--fg-strong);
font-weight: 600;
@@ -349,6 +408,12 @@
word-break: break-word;
line-height: 1.5;
}
.expandMessage {
display: block;
margin-block-start: 6px;
font-weight: normal;
font-size: var(--fs-small);
}
.fullMessage {
margin-top: 6px;
color: var(--fg);