sinelaw/fresh · warning

[pkg] Failed to update registry

Error message

[pkg] Failed to update registry ${source}: ${result.stderr}

What it means

A non-fatal `editor.warn` from `syncRegistry` in crates/fresh-editor/plugins/pkg.ts:506. When an existing registry clone fails to update via git, the plugin logs `[pkg] Failed to update registry ${source}: ${result.stderr}` with the raw git stderr. It indicates the git fetch/pull for one registry source failed (network, auth, or repo problems) — sync continues with other sources.

Solutions

  1. Check network/DNS and proxy settings, then re-run the package sync
  2. Verify the registry URL is a public, reachable git repo (`git ls-remote <url>`)
  3. Fix git credentials (SSH key, token) for the host
  4. Delete the stale registry clone at the index path so the next sync does a fresh clone

Example fix

// before (config)
registries: ["git@private-host:team/registry.git"]
// after
registries: ["https://github.com/team/registry.git"]
Defensive patterns

Strategy: retry

Validate before calling

// before syncing, check reachability
const ok = await editor.canReach ? await editor.canReach(source) : true;
if (!ok) { editor.setStatus('Offline: skipping registry sync'); return; }
// verify repo exists
// git ls-remote <source> exit code 0

Type guard

function isGitFailure(result) { return typeof result === 'object' && typeof result.exit_code === 'number' && typeof result.stderr === 'string'; }

Try / catch

const result = await gitCommand(['pull'], indexPath);
if (result.exit_code !== 0) {
  if (result.stderr.includes('Could not resolve host') && retries < 3) { await sleep(2000); return syncRegistry(); }
  editor.warn(`[pkg] Failed to update registry ${source}: ${result.stderr}`);
}

Prevention

When it happens

Trigger: `syncRegistry` runs for an already-cloned registry directory and `gitCommand` (e.g. `git pull`/`fetch`) exits non-zero: no DNS ("Could not resolve host"), private repo / 403, missing remote, or any other git failure with stderr output.

Common situations: Working offline or behind a proxy/firewall; registry repo made private or deleted; expired git credentials or missing deploy key; wrong registry URL configured in pkg settings.

Understand the failure class

Background: "git command failed": what it means when a tool shells out to git and git exits non-zero — this error's family across 21 libraries.

Related errors


AI-assisted analysis of sinelaw/fresh@67894ca546 (2026-09-13). Data as JSON: /api/errors/05285e42fe8686d2. Report an issue: GitHub.

Appendix: source

Thrown at crates/fresh-editor/plugins/pkg.ts:506

  const errors: string[] = [];

  for (const source of sources) {
    const indexPath = editor.pathJoin(INDEX_DIR, hashString(source));

    if (fsLocal.fileExists(indexPath)) {
      // Update existing
      editor.setStatus(`Updating registry: ${source}...`);
      const result = await gitCommand(["-C", `${indexPath}`, "pull", "--ff-only"]);
      if (result.exit_code === 0) {
        synced++;
      } else {
        const errorMsg = result.stderr.includes("Could not resolve host")
          ? "Network error"
          : result.stderr.includes("Authentication") || result.stderr.includes("403")
          ? "Authentication failed (check if repo is public)"
          : result.stderr.split("\n")[0] || "Unknown error";
        errors.push(`${source}: ${errorMsg}`);
        editor.warn(`[pkg] Failed to update registry ${source}: ${result.stderr}`);
      }
    } else {
      // Clone new
      editor.setStatus(`Cloning registry: ${source}...`);
      const result = await gitCommand(["clone", "--depth", "1", `${source}`, `${indexPath}`]);
      if (result.exit_code === 0) {
        synced++;
      } else {
        const errorMsg = result.stderr.includes("Could not resolve host")
          ? "Network error"
          : result.stderr.includes("not found") || result.stderr.includes("404")
          ? "Repository not found"
          : result.stderr.includes("Authentication") || result.stderr.includes("403")
          ? "Authentication failed (check if repo is public)"
          : result.stderr.split("\n")[0] || "Unknown error";
        errors.push(`${source}: ${errorMsg}`);
        editor.warn(`[pkg] Failed to clone registry ${source}: ${result.stderr}`);
      }

View on GitHub (pinned to 67894ca546)