[LCHIB-786] support symlink files for PTS v2 embedding (main) - #1377
Merged
Conversation
…ble failure details
…-the-gate-command-output feature/LCHIB-777: improve the gate command output to display actionable failure details
Release for v1.124.5
…-gate-command-output-v1 feature/LCHIB-777: remove stop command and escape content from ::
Release for v1.124.6
… PTS v2 embedding Symlink files in git were excluded from file collection because only TYPE_FILE entries were accepted. This change detects SYMLINK entries, resolves them to their target blob via the git tree, and sends them as regular GitFiles with the symlink path but the target's content. Symlinks pointing outside the repo, broken symlinks, and multi-level symlinks are safely skipped. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace unnecessary `continue OUTER` with `continue` (not inside inner for loop) - Add absolute path guard to resolveSymlinkTarget - Add comment explaining symlinkDir null check - Add tests for cross-directory symlinks (subdir→parent, parent→subdir) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use resolved content blob ID for dedup check so symlink target changes are detected even when the symlink itself is unchanged - Fix Windows path separator in resolveSymlinkTarget (replace \ with /) - Remove inline comment explaining symlinkDir null check - Merge cross-directory symlink tests into one test case - Extract collectFilePaths() helper to reduce test boilerplate Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…-symlink feature/LCHIB-786: support symlink files for PTS v2 embedding
- CommitGraphCollector.java: keep main's `reportAllFiles` optimization and `readers::get` (ThreadLocal) for GitFile; apply v1's symlink support (resolveSymlinkTarget + restructured loop) - CommitGraphCollectorTest.java: adapt v1's tests to main API (ByRepository.collectFiles instead of ByRepository.transfer) - tests/commands/test_gate.py: drop v1's LAUNCHABLE_TOKEN duplicates, keep main's SMART_TESTS_TOKEN versions - launchable/commands/gate.py: rm (already ported to smart_tests/) - smart_tests/jar/exe_deploy.jar: rebuilt Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Konboi
force-pushed
the
feature/LCHIB-786-support-symlink-main
branch
from
September 4, 2026 03:54
0e98b83 to
6ce707e
Compare
ono-max
approved these changes
Sep 7, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Forward-port of #1375 (merged to v1) to main.
When a repository contains symlinks, PTS v2 file embedding failed to index them. The symlink entry's blob ID is just a string containing the target path — it never changes even if the target file's content changes — so the server-side dedup check would incorrectly skip re-embedding the symlink path when the target content changed.
What
SYMLINKentries incollectFiles()inCommitGraphCollector.ByRepositoryresolveSymlinkTarget()..or absolute), are broken (target not found in tree), or point to non-regular files (directories, other symlinks)resolved.toString()uses\on Windows; normalize to/for JGit'sTreeWalk.forPathPlease Review Here
collectFiles()loop restructuring (lines ~528–570): subtree dedup still uses the tree object ID correctly; regular files and symlinks now share the post-resolve dedup checkresolveSymlinkTarget(): uses the per-ByRepositoryobjectReader(same as v1)