Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

A cache hit drops the symbolic links in a task's outputs

Offen
#884 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
45/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Aktiv
Tech-Stack
rust
Bereich
build-system

Rechercherichtung

Start with create_output_archive in crates/vt/src/session/cache/archive.rs and walk_glob_files in crates/vt/src/session/execute/glob.rs; the issue describes how both handle symbolic links. Reproduce with the provided task, then check the cache archive and glob behavior for links. Done when a cache hit restores links matched by an output glob; automatic tracking of created links is explicitly left open.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Written by an AI agent (Claude) on behalf of @jasonkuhrt.

A cache hit leaves out the symbolic links a task created in its outputs, so the replayed output differs from the one the task produced.

We hit it with Nitro's server build: its dependency tracer (nf3) writes server/node_modules/tslib -> .nf3/[email protected]. After a hit, the link is gone, and the replayed server resolves tslib outside its own output, or not at all.

Repro. A package with this script and task:

// make-link.mjs
import fs from 'node:fs';
fs.mkdirSync('dist/.store/pkg', { recursive: true });
fs.writeFileSync('dist/.store/pkg/index.js', 'export default 42;');
fs.symlinkSync('.store/pkg', 'dist/pkg');
// vite.config.ts
export default defineConfig({
  run: {
    tasks: {
      build: {
        command: 'node make-link.mjs',
        cache: { output: [{ auto: true }, 'dist/**'] },
      },
    },
  },
});

vp run build, rm -rf dist, vp run build again: the second run is a cache hit, dist/.store/pkg/index.js is back, and dist/pkg is missing.

Causes (at 0346c268):

  1. create_output_archive reads each output with std::fs::metadata, which follows links, and archives regular files only: a directory link is skipped, and a file link would be stored as a copy of its target.
  2. walk_glob_files keeps only is_file() entries, so an output glob never lists a link.
  3. Automatic output tracking never sees a link being created: fspy has no interceptor for symlink/symlinkat (preload interceptions, and the Linux syscall handler), nor CreateSymbolicLinkW on Windows. So even with 1 and 2 fixed, { auto: true } alone can't list a created link; it takes an output glob that matches it.

A fix for 1 and 2 follows in a PR. 3 is left open here.

Vorherrschende Sprache
Rust
Sterne
480
Forks
50
Ø Merge
1 T. 3 Std.
Gemergte PRs (30 T.)
62

Entwicklungsumgebung

In Codespaces öffnen

Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus voidzero-dev/vite-task

Alle Issues in voidzero-dev/vite-task

Ähnliche Issues

Weitere Issues zu Rust

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.