badges/shields · error · NotFound

changesetRevision not found

Error message

changesetRevision not found

What it means

Thrown by the GalaxyToolshed badge service when the Tool Shed API returns no installable revisions for a repository. The service first fetches the ordered list of installable revisions via fetchOrderedInstallableRevisionsSchema; if the result is not a non-empty array, there is nothing to query revision install info for, so a NotFound is raised with message 'changesetRevision not found'.

Source

Thrown at services/galaxytoolshed/galaxytoolshed-base.js:47

  async fetchRepositoryRevisionInstallInfoSchema({
    repository,
    owner,
    changesetRevision,
  }) {
    return this._requestJson({
      schema: repositoryRevisionInstallInfoSchema,
      url: `${this.constructor.baseUrl}/api/repositories/get_repository_revision_install_info?name=${repository}&owner=${owner}&changeset_revision=${changesetRevision}`,
    })
  }

  async fetchLastOrderedInstallableRevisionsSchema({ repository, owner }) {
    const changesetRevisions =
      await this.fetchOrderedInstallableRevisionsSchema({
        repository,
        owner,
      })
    if (!Array.isArray(changesetRevisions) || !changesetRevisions.length) {
      throw new NotFound({ prettyMessage: 'changesetRevision not found' })
    }
    return this.fetchRepositoryRevisionInstallInfoSchema({
      repository,
      owner,
      changesetRevision: changesetRevisions[0],
    })
  }
}

View on GitHub (pinned to 766fd8bc89)

Solutions

  1. Verify the repository and owner names exactly match those in the Galaxy Tool Shed UI
  2. Check the repository in the Tool Shed web UI to confirm it has at least one installable revision
  3. Query the Tool Shed API directly (e.g. /api/repos/{owner}/{repo}/ordered_revisions?installable=true) to confirm the payload is non-empty
  4. Retry later if the Tool Shed is having API issues

Example fix

// before
/api/galaxytoolshed/dependencies/wrong-owner/my-tool
// after
/api/galaxytoolshed/dependencies/bgruening/my-tool
Defensive patterns

Strategy: validation

Validate before calling

const revs = await fetch(`https://toolshed.g2.bx.psu.edu/api/repos/${owner}/${repo}/ordered_revisions?installable=true`).then(r => r.json());if (!Array.isArray(revs) || revs.length === 0) { console.warn('no installable revisions; skip badge'); }

Type guard

const hasRevisions = (v) => Array.isArray(v) && v.length > 0 && typeof v[0] === 'string';

Try / catch

try { const badge = await getGalaxyToolshedRevisionBadge(repo, owner); } catch (e) { if (e prettyMessage === 'changesetRevision not found') { renderBadge('no installable revisions'); } else { throw e; } }

Prevention

When it happens

Trigger: Calling the galaxytoolshed revision badge for a repository whose Tool Shed API response contains an empty or missing changeset_revisions list, or when the API returns a non-array (e.g. an error object) for that repository/owner combination.

Common situations: Repository name or owner typos in the badge URL; a repository that exists in the Tool Shed but has never had a shippable/revision metadata update so no installable revisions exist; Tool Shed API outages or schema changes returning empty payloads.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of badges/shields@766fd8bc89 (2026-08-30). Data as JSON: /api/errors/f11ee429e5d4ddba. Report an issue: GitHub.