{
  "name": "libvcs",
  "url": "https://libvcs.git-pull.com",
  "description": "Typed Python utilities for Git, SVN, and Mercurial. Parse URLs, execute commands, and synchronize repositories – all with a consistent, type-friendly API.",
  "sourceRepository": "https://github.com/vcs-python/libvcs/",
  "agentEntrypoints": {
    "manifest": "/docs.json",
    "llms": "/llms.txt",
    "llmsFull": "/llms-full.txt"
  },
  "pages": [
    {
      "title": "API Reference",
      "description": "libvcs exposes three public subsystems – URL parsing, command execution, and repository synchronization – plus a pytest plugin for test fixtures.",
      "section": "Documentation",
      "url": "/api/",
      "markdownUrl": "/api/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "API Reference"
        },
        {
          "id": "subsystems",
          "level": 2,
          "text": "Subsystems"
        }
      ]
    },
    {
      "title": "pytest Plugin",
      "description": "",
      "section": "Documentation",
      "url": "/api/pytest-plugin/",
      "markdownUrl": "/api/pytest-plugin.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "pytest Plugin"
        },
        {
          "id": "types",
          "level": 2,
          "text": "Types"
        },
        {
          "id": "libvcs.pytest_plugin.GitCommitEnvVars",
          "level": 3,
          "text": "GitCommitEnvVars"
        },
        {
          "id": "libvcs.pytest_plugin.CreateRepoFn",
          "level": 3,
          "text": "CreateRepoFn"
        },
        {
          "id": "libvcs.pytest_plugin.CreateRepoFn.__call__",
          "level": 4,
          "text": "__call__()"
        },
        {
          "id": "libvcs.pytest_plugin.CreateRepoPostInitFn",
          "level": 3,
          "text": "CreateRepoPostInitFn"
        },
        {
          "id": "libvcs.pytest_plugin.CreateRepoPostInitFn.__call__",
          "level": 4,
          "text": "__call__()"
        }
      ]
    },
    {
      "title": "branch",
      "description": "For git-branch(1).",
      "section": "Documentation",
      "url": "/cmd/git/branch/",
      "markdownUrl": "/cmd/git/branch.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "branch"
        },
        {
          "id": "overview",
          "level": 2,
          "text": "Overview"
        },
        {
          "id": "example",
          "level": 3,
          "text": "Example"
        },
        {
          "id": "api-reference",
          "level": 2,
          "text": "API Reference"
        },
        {
          "id": "libvcs.cmd.git.GitBranchManager",
          "level": 3,
          "text": "GitBranchManager"
        },
        {
          "id": "libvcs.cmd.git.GitBranchManager.branch_name",
          "level": 4,
          "text": "branch_name"
        },
        {
          "id": "libvcs.cmd.git.GitBranchManager.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchManager.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitBranchManager.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchManager.checkout",
          "level": 4,
          "text": "checkout()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchManager.create",
          "level": 4,
          "text": "create()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchManager._ls",
          "level": 4,
          "text": "_ls()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchManager.ls",
          "level": 4,
          "text": "ls()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchManager.get",
          "level": 4,
          "text": "get()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchManager.filter",
          "level": 4,
          "text": "filter()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchCmd",
          "level": 3,
          "text": "GitBranchCmd"
        },
        {
          "id": "libvcs.cmd.git.GitBranchCmd.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchCmd.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitBranchCmd.branch_name",
          "level": 4,
          "text": "branch_name"
        },
        {
          "id": "libvcs.cmd.git.GitBranchCmd.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchCmd.checkout",
          "level": 4,
          "text": "checkout()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchCmd.create",
          "level": 4,
          "text": "create()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchCmd.delete",
          "level": 4,
          "text": "delete()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchCmd.rename",
          "level": 4,
          "text": "rename()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchCmd.copy",
          "level": 4,
          "text": "copy()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchCmd.set_upstream",
          "level": 4,
          "text": "set_upstream()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchCmd.unset_upstream",
          "level": 4,
          "text": "unset_upstream()"
        },
        {
          "id": "libvcs.cmd.git.GitBranchCmd.track",
          "level": 4,
          "text": "track()"
        }
      ]
    },
    {
      "title": "libvcs.cmd.git",
      "description": "For git(1).",
      "section": "Documentation",
      "url": "/cmd/git/",
      "markdownUrl": "/cmd/git/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "libvcs.cmd.git"
        },
        {
          "id": "managers-and-commands",
          "level": 2,
          "text": "Managers and Commands"
        },
        {
          "id": "quick-example",
          "level": 3,
          "text": "Quick Example"
        },
        {
          "id": "libvcs.cmd.git.Git",
          "level": 4,
          "text": "Git"
        },
        {
          "id": "libvcs.cmd.git.Git.__init__",
          "level": 5,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.Git.path",
          "level": 5,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.Git.progress_callback",
          "level": 5,
          "text": "progress_callback"
        },
        {
          "id": "libvcs.cmd.git.Git.submodule",
          "level": 5,
          "text": "submodule"
        },
        {
          "id": "libvcs.cmd.git.Git.submodules",
          "level": 5,
          "text": "submodules"
        },
        {
          "id": "libvcs.cmd.git.Git.remotes",
          "level": 5,
          "text": "remotes"
        },
        {
          "id": "libvcs.cmd.git.Git.stash",
          "level": 5,
          "text": "stash"
        },
        {
          "id": "libvcs.cmd.git.Git.stashes",
          "level": 5,
          "text": "stashes"
        },
        {
          "id": "libvcs.cmd.git.Git.branches",
          "level": 5,
          "text": "branches"
        },
        {
          "id": "libvcs.cmd.git.Git.tags",
          "level": 5,
          "text": "tags"
        },
        {
          "id": "libvcs.cmd.git.Git.worktrees",
          "level": 5,
          "text": "worktrees"
        },
        {
          "id": "libvcs.cmd.git.Git.notes",
          "level": 5,
          "text": "notes"
        },
        {
          "id": "libvcs.cmd.git.Git.reflog",
          "level": 5,
          "text": "reflog"
        },
        {
          "id": "libvcs.cmd.git.Git.run",
          "level": 5,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.Git.clone",
          "level": 5,
          "text": "clone()"
        },
        {
          "id": "libvcs.cmd.git.Git.fetch",
          "level": 5,
          "text": "fetch()"
        },
        {
          "id": "libvcs.cmd.git.Git.rebase",
          "level": 5,
          "text": "rebase()"
        },
        {
          "id": "libvcs.cmd.git.Git.pull",
          "level": 5,
          "text": "pull()"
        },
        {
          "id": "libvcs.cmd.git.Git.init",
          "level": 5,
          "text": "init()"
        },
        {
          "id": "libvcs.cmd.git.Git.help",
          "level": 5,
          "text": "help()"
        },
        {
          "id": "libvcs.cmd.git.Git.reset",
          "level": 5,
          "text": "reset()"
        },
        {
          "id": "libvcs.cmd.git.Git.checkout",
          "level": 5,
          "text": "checkout()"
        },
        {
          "id": "libvcs.cmd.git.Git.status",
          "level": 5,
          "text": "status()"
        },
        {
          "id": "libvcs.cmd.git.Git.config",
          "level": 5,
          "text": "config()"
        },
        {
          "id": "libvcs.cmd.git.Git.version",
          "level": 5,
          "text": "version()"
        },
        {
          "id": "libvcs.cmd.git.Git.rev_parse",
          "level": 5,
          "text": "rev_parse()"
        },
        {
          "id": "libvcs.cmd.git.Git.rev_list",
          "level": 5,
          "text": "rev_list()"
        },
        {
          "id": "libvcs.cmd.git.Git.symbolic_ref",
          "level": 5,
          "text": "symbolic_ref()"
        },
        {
          "id": "libvcs.cmd.git.Git.show_ref",
          "level": 5,
          "text": "show_ref()"
        }
      ]
    },
    {
      "title": "notes",
      "description": "For git-notes(1).",
      "section": "Documentation",
      "url": "/cmd/git/notes/",
      "markdownUrl": "/cmd/git/notes.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "notes"
        },
        {
          "id": "overview",
          "level": 2,
          "text": "Overview"
        },
        {
          "id": "example",
          "level": 3,
          "text": "Example"
        },
        {
          "id": "api-reference",
          "level": 2,
          "text": "API Reference"
        },
        {
          "id": "libvcs.cmd.git.GitNotesManager",
          "level": 3,
          "text": "GitNotesManager"
        },
        {
          "id": "libvcs.cmd.git.GitNotesManager.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitNotesManager.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitNotesManager.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitNotesManager.add",
          "level": 4,
          "text": "add()"
        },
        {
          "id": "libvcs.cmd.git.GitNotesManager.prune",
          "level": 4,
          "text": "prune()"
        },
        {
          "id": "libvcs.cmd.git.GitNotesManager.merge",
          "level": 4,
          "text": "merge()"
        },
        {
          "id": "libvcs.cmd.git.GitNotesManager.get_ref",
          "level": 4,
          "text": "get_ref()"
        },
        {
          "id": "libvcs.cmd.git.GitNotesManager._ls",
          "level": 4,
          "text": "_ls()"
        },
        {
          "id": "libvcs.cmd.git.GitNotesManager.ls",
          "level": 4,
          "text": "ls()"
        },
        {
          "id": "libvcs.cmd.git.GitNotesManager.get",
          "level": 4,
          "text": "get()"
        },
        {
          "id": "libvcs.cmd.git.GitNotesManager.filter",
          "level": 4,
          "text": "filter()"
        },
        {
          "id": "libvcs.cmd.git.GitNoteCmd",
          "level": 3,
          "text": "GitNoteCmd"
        },
        {
          "id": "libvcs.cmd.git.GitNoteCmd.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitNoteCmd.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitNoteCmd.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitNoteCmd.show",
          "level": 4,
          "text": "show()"
        },
        {
          "id": "libvcs.cmd.git.GitNoteCmd.remove",
          "level": 4,
          "text": "remove()"
        },
        {
          "id": "libvcs.cmd.git.GitNoteCmd.append",
          "level": 4,
          "text": "append()"
        },
        {
          "id": "libvcs.cmd.git.GitNoteCmd.edit",
          "level": 4,
          "text": "edit()"
        },
        {
          "id": "libvcs.cmd.git.GitNoteCmd.copy",
          "level": 4,
          "text": "copy()"
        }
      ]
    },
    {
      "title": "reflog",
      "description": "For git-reflog(1).",
      "section": "Documentation",
      "url": "/cmd/git/reflog/",
      "markdownUrl": "/cmd/git/reflog.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "reflog"
        },
        {
          "id": "overview",
          "level": 2,
          "text": "Overview"
        },
        {
          "id": "example",
          "level": 3,
          "text": "Example"
        },
        {
          "id": "api-reference",
          "level": 2,
          "text": "API Reference"
        },
        {
          "id": "libvcs.cmd.git.GitReflogManager",
          "level": 3,
          "text": "GitReflogManager"
        },
        {
          "id": "libvcs.cmd.git.GitReflogManager.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitReflogManager.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitReflogManager.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitReflogManager.show",
          "level": 4,
          "text": "show()"
        },
        {
          "id": "libvcs.cmd.git.GitReflogManager.expire",
          "level": 4,
          "text": "expire()"
        },
        {
          "id": "libvcs.cmd.git.GitReflogManager.exists",
          "level": 4,
          "text": "exists()"
        },
        {
          "id": "libvcs.cmd.git.GitReflogManager._ls",
          "level": 4,
          "text": "_ls()"
        },
        {
          "id": "libvcs.cmd.git.GitReflogManager.ls",
          "level": 4,
          "text": "ls()"
        },
        {
          "id": "libvcs.cmd.git.GitReflogManager.get",
          "level": 4,
          "text": "get()"
        },
        {
          "id": "libvcs.cmd.git.GitReflogManager.filter",
          "level": 4,
          "text": "filter()"
        },
        {
          "id": "libvcs.cmd.git.GitReflogEntryCmd",
          "level": 3,
          "text": "GitReflogEntryCmd"
        },
        {
          "id": "libvcs.cmd.git.GitReflogEntryCmd.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitReflogEntryCmd.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitReflogEntryCmd.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitReflogEntryCmd.show",
          "level": 4,
          "text": "show()"
        },
        {
          "id": "libvcs.cmd.git.GitReflogEntryCmd.delete",
          "level": 4,
          "text": "delete()"
        },
        {
          "id": "libvcs.cmd.git.GitReflogEntry",
          "level": 3,
          "text": "GitReflogEntry"
        },
        {
          "id": "libvcs.cmd.git.GitReflogEntry.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitReflogEntry.sha",
          "level": 4,
          "text": "sha"
        },
        {
          "id": "libvcs.cmd.git.GitReflogEntry.refspec",
          "level": 4,
          "text": "refspec"
        },
        {
          "id": "libvcs.cmd.git.GitReflogEntry.action",
          "level": 4,
          "text": "action"
        },
        {
          "id": "libvcs.cmd.git.GitReflogEntry.message",
          "level": 4,
          "text": "message"
        },
        {
          "id": "libvcs.cmd.git.GitReflogEntry._cmd",
          "level": 4,
          "text": "_cmd"
        },
        {
          "id": "libvcs.cmd.git.GitReflogEntry.cmd",
          "level": 4,
          "text": "cmd"
        }
      ]
    },
    {
      "title": "remote",
      "description": "For git-remote(1).",
      "section": "Documentation",
      "url": "/cmd/git/remote/",
      "markdownUrl": "/cmd/git/remote.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "remote"
        },
        {
          "id": "overview",
          "level": 2,
          "text": "Overview"
        },
        {
          "id": "example",
          "level": 3,
          "text": "Example"
        },
        {
          "id": "api-reference",
          "level": 2,
          "text": "API Reference"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteManager",
          "level": 3,
          "text": "GitRemoteManager"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteManager.remote_name",
          "level": 4,
          "text": "remote_name"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteManager.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteManager.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteManager.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteManager.add",
          "level": 4,
          "text": "add()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteManager.show",
          "level": 4,
          "text": "show()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteManager._ls",
          "level": 4,
          "text": "_ls()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteManager.ls",
          "level": 4,
          "text": "ls()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteManager.get",
          "level": 4,
          "text": "get()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteManager.filter",
          "level": 4,
          "text": "filter()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd",
          "level": 3,
          "text": "GitRemoteCmd"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd.remote_name",
          "level": 4,
          "text": "remote_name"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd.fetch_url",
          "level": 4,
          "text": "fetch_url"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd.push_url",
          "level": 4,
          "text": "push_url"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd.rename",
          "level": 4,
          "text": "rename()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd.remove",
          "level": 4,
          "text": "remove()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd.show",
          "level": 4,
          "text": "show()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd.prune",
          "level": 4,
          "text": "prune()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd.get_url",
          "level": 4,
          "text": "get_url()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd.set_url",
          "level": 4,
          "text": "set_url()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd.set_branches",
          "level": 4,
          "text": "set_branches()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd.set_head",
          "level": 4,
          "text": "set_head()"
        },
        {
          "id": "libvcs.cmd.git.GitRemoteCmd.update",
          "level": 4,
          "text": "update()"
        }
      ]
    },
    {
      "title": "stash",
      "description": "For git-stash(1).",
      "section": "Documentation",
      "url": "/cmd/git/stash/",
      "markdownUrl": "/cmd/git/stash.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "stash"
        },
        {
          "id": "overview",
          "level": 2,
          "text": "Overview"
        },
        {
          "id": "example",
          "level": 3,
          "text": "Example"
        },
        {
          "id": "api-reference",
          "level": 2,
          "text": "API Reference"
        },
        {
          "id": "libvcs.cmd.git.GitStashManager",
          "level": 3,
          "text": "GitStashManager"
        },
        {
          "id": "libvcs.cmd.git.GitStashManager.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitStashManager.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitStashManager.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitStashManager.push",
          "level": 4,
          "text": "push()"
        },
        {
          "id": "libvcs.cmd.git.GitStashManager.clear",
          "level": 4,
          "text": "clear()"
        },
        {
          "id": "libvcs.cmd.git.GitStashManager._ls",
          "level": 4,
          "text": "_ls()"
        },
        {
          "id": "libvcs.cmd.git.GitStashManager.ls",
          "level": 4,
          "text": "ls()"
        },
        {
          "id": "libvcs.cmd.git.GitStashManager.get",
          "level": 4,
          "text": "get()"
        },
        {
          "id": "libvcs.cmd.git.GitStashManager.filter",
          "level": 4,
          "text": "filter()"
        },
        {
          "id": "libvcs.cmd.git.GitStashEntryCmd",
          "level": 3,
          "text": "GitStashEntryCmd"
        },
        {
          "id": "libvcs.cmd.git.GitStashEntryCmd.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitStashEntryCmd.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitStashEntryCmd.index",
          "level": 4,
          "text": "index"
        },
        {
          "id": "libvcs.cmd.git.GitStashEntryCmd.branch",
          "level": 4,
          "text": "branch"
        },
        {
          "id": "libvcs.cmd.git.GitStashEntryCmd.message",
          "level": 4,
          "text": "message"
        },
        {
          "id": "libvcs.cmd.git.GitStashEntryCmd.stash_ref",
          "level": 4,
          "text": "stash_ref"
        },
        {
          "id": "libvcs.cmd.git.GitStashEntryCmd.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitStashEntryCmd.show",
          "level": 4,
          "text": "show()"
        },
        {
          "id": "libvcs.cmd.git.GitStashEntryCmd.apply",
          "level": 4,
          "text": "apply()"
        },
        {
          "id": "libvcs.cmd.git.GitStashEntryCmd.pop",
          "level": 4,
          "text": "pop()"
        },
        {
          "id": "libvcs.cmd.git.GitStashEntryCmd.drop",
          "level": 4,
          "text": "drop()"
        },
        {
          "id": "libvcs.cmd.git.GitStashEntryCmd.create_branch",
          "level": 4,
          "text": "create_branch()"
        },
        {
          "id": "libvcs.cmd.git.GitStashCmd",
          "level": 3,
          "text": "GitStashCmd"
        },
        {
          "id": "libvcs.cmd.git.GitStashCmd.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitStashCmd.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitStashCmd.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitStashCmd.ls",
          "level": 4,
          "text": "ls()"
        },
        {
          "id": "libvcs.cmd.git.GitStashCmd.push",
          "level": 4,
          "text": "push()"
        },
        {
          "id": "libvcs.cmd.git.GitStashCmd.pop",
          "level": 4,
          "text": "pop()"
        },
        {
          "id": "libvcs.cmd.git.GitStashCmd.save",
          "level": 4,
          "text": "save()"
        }
      ]
    },
    {
      "title": "submodule",
      "description": "For git-submodule(1).",
      "section": "Documentation",
      "url": "/cmd/git/submodule/",
      "markdownUrl": "/cmd/git/submodule.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "submodule"
        },
        {
          "id": "overview",
          "level": 2,
          "text": "Overview"
        },
        {
          "id": "example",
          "level": 3,
          "text": "Example"
        },
        {
          "id": "api-reference",
          "level": 2,
          "text": "API Reference"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleManager",
          "level": 3,
          "text": "GitSubmoduleManager"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleManager.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleManager.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleManager.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleManager.add",
          "level": 4,
          "text": "add()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleManager.init",
          "level": 4,
          "text": "init()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleManager.update",
          "level": 4,
          "text": "update()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleManager.foreach",
          "level": 4,
          "text": "foreach()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleManager.sync",
          "level": 4,
          "text": "sync()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleManager.summary",
          "level": 4,
          "text": "summary()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleManager.absorbgitdirs",
          "level": 4,
          "text": "absorbgitdirs()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleManager._ls",
          "level": 4,
          "text": "_ls()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleManager.ls",
          "level": 4,
          "text": "ls()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleManager.get",
          "level": 4,
          "text": "get()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleManager.filter",
          "level": 4,
          "text": "filter()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmodule",
          "level": 3,
          "text": "GitSubmodule"
        },
        {
          "id": "libvcs.cmd.git.GitSubmodule.name",
          "level": 4,
          "text": "name"
        },
        {
          "id": "libvcs.cmd.git.GitSubmodule.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitSubmodule.url",
          "level": 4,
          "text": "url"
        },
        {
          "id": "libvcs.cmd.git.GitSubmodule.sha",
          "level": 4,
          "text": "sha"
        },
        {
          "id": "libvcs.cmd.git.GitSubmodule.branch",
          "level": 4,
          "text": "branch"
        },
        {
          "id": "libvcs.cmd.git.GitSubmodule.status_prefix",
          "level": 4,
          "text": "status_prefix"
        },
        {
          "id": "libvcs.cmd.git.GitSubmodule._cmd",
          "level": 4,
          "text": "_cmd"
        },
        {
          "id": "libvcs.cmd.git.GitSubmodule.cmd",
          "level": 4,
          "text": "cmd"
        },
        {
          "id": "libvcs.cmd.git.GitSubmodule.initialized",
          "level": 4,
          "text": "initialized"
        },
        {
          "id": "libvcs.cmd.git.GitSubmodule.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleEntryCmd",
          "level": 3,
          "text": "GitSubmoduleEntryCmd"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleEntryCmd.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleEntryCmd.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleEntryCmd.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleEntryCmd.init",
          "level": 4,
          "text": "init()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleEntryCmd.update",
          "level": 4,
          "text": "update()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleEntryCmd.deinit",
          "level": 4,
          "text": "deinit()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleEntryCmd.set_branch",
          "level": 4,
          "text": "set_branch()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleEntryCmd.set_url",
          "level": 4,
          "text": "set_url()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleEntryCmd.status",
          "level": 4,
          "text": "status()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleEntryCmd.absorbgitdirs",
          "level": 4,
          "text": "absorbgitdirs()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleCmd",
          "level": 3,
          "text": "GitSubmoduleCmd"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleCmd.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleCmd.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleCmd.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleCmd.init",
          "level": 4,
          "text": "init()"
        },
        {
          "id": "libvcs.cmd.git.GitSubmoduleCmd.update",
          "level": 4,
          "text": "update()"
        }
      ]
    },
    {
      "title": "tag",
      "description": "For git-tag(1).",
      "section": "Documentation",
      "url": "/cmd/git/tag/",
      "markdownUrl": "/cmd/git/tag.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "tag"
        },
        {
          "id": "overview",
          "level": 2,
          "text": "Overview"
        },
        {
          "id": "example",
          "level": 3,
          "text": "Example"
        },
        {
          "id": "api-reference",
          "level": 2,
          "text": "API Reference"
        },
        {
          "id": "libvcs.cmd.git.GitTagManager",
          "level": 3,
          "text": "GitTagManager"
        },
        {
          "id": "libvcs.cmd.git.GitTagManager.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitTagManager.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitTagManager.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitTagManager.create",
          "level": 4,
          "text": "create()"
        },
        {
          "id": "libvcs.cmd.git.GitTagManager._ls",
          "level": 4,
          "text": "_ls()"
        },
        {
          "id": "libvcs.cmd.git.GitTagManager.ls",
          "level": 4,
          "text": "ls()"
        },
        {
          "id": "libvcs.cmd.git.GitTagManager.get",
          "level": 4,
          "text": "get()"
        },
        {
          "id": "libvcs.cmd.git.GitTagManager.filter",
          "level": 4,
          "text": "filter()"
        },
        {
          "id": "libvcs.cmd.git.GitTagCmd",
          "level": 3,
          "text": "GitTagCmd"
        },
        {
          "id": "libvcs.cmd.git.GitTagCmd.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitTagCmd.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitTagCmd.tag_name",
          "level": 4,
          "text": "tag_name"
        },
        {
          "id": "libvcs.cmd.git.GitTagCmd.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitTagCmd.delete",
          "level": 4,
          "text": "delete()"
        },
        {
          "id": "libvcs.cmd.git.GitTagCmd.verify",
          "level": 4,
          "text": "verify()"
        },
        {
          "id": "libvcs.cmd.git.GitTagCmd.show",
          "level": 4,
          "text": "show()"
        }
      ]
    },
    {
      "title": "worktree",
      "description": "For git-worktree(1).",
      "section": "Documentation",
      "url": "/cmd/git/worktree/",
      "markdownUrl": "/cmd/git/worktree.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "worktree"
        },
        {
          "id": "overview",
          "level": 2,
          "text": "Overview"
        },
        {
          "id": "example",
          "level": 3,
          "text": "Example"
        },
        {
          "id": "api-reference",
          "level": 2,
          "text": "API Reference"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeManager",
          "level": 3,
          "text": "GitWorktreeManager"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeManager.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeManager.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeManager.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeManager.add",
          "level": 4,
          "text": "add()"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeManager.prune",
          "level": 4,
          "text": "prune()"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeManager._ls",
          "level": 4,
          "text": "_ls()"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeManager.ls",
          "level": 4,
          "text": "ls()"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeManager.get",
          "level": 4,
          "text": "get()"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeManager.filter",
          "level": 4,
          "text": "filter()"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeCmd",
          "level": 3,
          "text": "GitWorktreeCmd"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeCmd.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeCmd.path",
          "level": 4,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeCmd.run",
          "level": 4,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeCmd.remove",
          "level": 4,
          "text": "remove()"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeCmd.lock",
          "level": 4,
          "text": "lock()"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeCmd.unlock",
          "level": 4,
          "text": "unlock()"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeCmd.move",
          "level": 4,
          "text": "move()"
        },
        {
          "id": "libvcs.cmd.git.GitWorktreeCmd.repair",
          "level": 4,
          "text": "repair()"
        }
      ]
    },
    {
      "title": "libvcs.cmd.hg",
      "description": "For mercurial, aka hg(1).",
      "section": "Documentation",
      "url": "/cmd/hg/",
      "markdownUrl": "/cmd/hg.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "libvcs.cmd.hg"
        },
        {
          "id": "libvcs.cmd.hg.HgColorType",
          "level": 2,
          "text": "HgColorType"
        },
        {
          "id": "libvcs.cmd.hg.HgColorType.boolean",
          "level": 3,
          "text": "boolean"
        },
        {
          "id": "libvcs.cmd.hg.HgColorType.always",
          "level": 3,
          "text": "always"
        },
        {
          "id": "libvcs.cmd.hg.HgColorType.auto",
          "level": 3,
          "text": "auto"
        },
        {
          "id": "libvcs.cmd.hg.HgColorType.never",
          "level": 3,
          "text": "never"
        },
        {
          "id": "libvcs.cmd.hg.HgColorType.debug",
          "level": 3,
          "text": "debug"
        },
        {
          "id": "libvcs.cmd.hg.HgPagerType",
          "level": 2,
          "text": "HgPagerType"
        },
        {
          "id": "libvcs.cmd.hg.HgPagerType.boolean",
          "level": 3,
          "text": "boolean"
        },
        {
          "id": "libvcs.cmd.hg.HgPagerType.always",
          "level": 3,
          "text": "always"
        },
        {
          "id": "libvcs.cmd.hg.HgPagerType.auto",
          "level": 3,
          "text": "auto"
        },
        {
          "id": "libvcs.cmd.hg.HgPagerType.never",
          "level": 3,
          "text": "never"
        },
        {
          "id": "libvcs.cmd.hg.Hg",
          "level": 2,
          "text": "Hg"
        },
        {
          "id": "libvcs.cmd.hg.Hg.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.hg.Hg.path",
          "level": 3,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.hg.Hg.progress_callback",
          "level": 3,
          "text": "progress_callback"
        },
        {
          "id": "libvcs.cmd.hg.Hg.run",
          "level": 3,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.hg.Hg.clone",
          "level": 3,
          "text": "clone()"
        },
        {
          "id": "libvcs.cmd.hg.Hg.update",
          "level": 3,
          "text": "update()"
        },
        {
          "id": "libvcs.cmd.hg.Hg.pull",
          "level": 3,
          "text": "pull()"
        }
      ]
    },
    {
      "title": "Commands - libvcs.cmd",
      "description": "Compare to: fabtools.git, salt.modules.git, ansible.builtin.git",
      "section": "Documentation",
      "url": "/cmd/",
      "markdownUrl": "/cmd/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Commands - libvcs.cmd"
        },
        {
          "id": "overview",
          "level": 2,
          "text": "Overview"
        },
        {
          "id": "when-to-use-cmd-vs-sync",
          "level": 3,
          "text": "When to use cmd vs sync"
        },
        {
          "id": "modules",
          "level": 2,
          "text": "Modules"
        }
      ]
    },
    {
      "title": "libvcs.cmd.svn",
      "description": "For subversion, aka svn(1)",
      "section": "Documentation",
      "url": "/cmd/svn/",
      "markdownUrl": "/cmd/svn.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "libvcs.cmd.svn"
        },
        {
          "id": "libvcs.cmd.svn.SvnPropsetValueOrValuePathRequired",
          "level": 2,
          "text": "SvnPropsetValueOrValuePathRequired"
        },
        {
          "id": "libvcs.cmd.svn.SvnPropsetValueOrValuePathRequired.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.svn.Svn",
          "level": 2,
          "text": "Svn"
        },
        {
          "id": "libvcs.cmd.svn.Svn.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.path",
          "level": 3,
          "text": "path"
        },
        {
          "id": "libvcs.cmd.svn.Svn.progress_callback",
          "level": 3,
          "text": "progress_callback"
        },
        {
          "id": "libvcs.cmd.svn.Svn.run",
          "level": 3,
          "text": "run()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.checkout",
          "level": 3,
          "text": "checkout()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.add",
          "level": 3,
          "text": "add()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.auth",
          "level": 3,
          "text": "auth()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.blame",
          "level": 3,
          "text": "blame()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.cat",
          "level": 3,
          "text": "cat()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.changelist",
          "level": 3,
          "text": "changelist()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.cleanup",
          "level": 3,
          "text": "cleanup()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.commit",
          "level": 3,
          "text": "commit()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.copy",
          "level": 3,
          "text": "copy()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.delete",
          "level": 3,
          "text": "delete()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.diff",
          "level": 3,
          "text": "diff()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.export",
          "level": 3,
          "text": "export()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.help",
          "level": 3,
          "text": "help()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.import_",
          "level": 3,
          "text": "import_()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.info",
          "level": 3,
          "text": "info()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.ls",
          "level": 3,
          "text": "ls()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.lock",
          "level": 3,
          "text": "lock()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.log",
          "level": 3,
          "text": "log()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.merge",
          "level": 3,
          "text": "merge()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.mkdir",
          "level": 3,
          "text": "mkdir()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.move",
          "level": 3,
          "text": "move()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.patch",
          "level": 3,
          "text": "patch()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.propdel",
          "level": 3,
          "text": "propdel()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.propedit",
          "level": 3,
          "text": "propedit()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.propget",
          "level": 3,
          "text": "propget()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.proplist",
          "level": 3,
          "text": "proplist()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.propset",
          "level": 3,
          "text": "propset()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.relocate",
          "level": 3,
          "text": "relocate()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.resolve",
          "level": 3,
          "text": "resolve()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.resolved",
          "level": 3,
          "text": "resolved()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.revert",
          "level": 3,
          "text": "revert()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.status",
          "level": 3,
          "text": "status()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.switch",
          "level": 3,
          "text": "switch()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.unlock",
          "level": 3,
          "text": "unlock()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.update",
          "level": 3,
          "text": "update()"
        },
        {
          "id": "libvcs.cmd.svn.Svn.upgrade",
          "level": 3,
          "text": "upgrade()"
        }
      ]
    },
    {
      "title": "Changelog",
      "description": "To install the unreleased libvcs version, see developmental releases.",
      "section": "Documentation",
      "url": "/history/",
      "markdownUrl": "/history.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Changelog"
        },
        {
          "id": "libvcs-0-42-x-unreleased",
          "level": 2,
          "text": "libvcs 0.42.x (unreleased)"
        },
        {
          "id": "libvcs-0-41-0-2026-05-10",
          "level": 2,
          "text": "libvcs 0.41.0 (2026-05-10)"
        },
        {
          "id": "breaking-changes",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "pytest-plugin-config-fixtures-move-under-the-vcs-namespace-529",
          "level": 4,
          "text": "pytest plugin config fixtures move under the vcs_ namespace (#529)"
        },
        {
          "id": "fixes",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "docs-theme-setup-now-chains-gp-sphinx-hooks-527",
          "level": 4,
          "text": "Docs theme setup now chains gp-sphinx hooks (#527)"
        },
        {
          "id": "documentation",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "docs-site-uses-the-current-gp-furo-theme-stack-526",
          "level": 4,
          "text": "Docs site uses the current gp-furo theme stack (#526)"
        },
        {
          "id": "libvcs-0-40-0-2026-04-25",
          "level": 2,
          "text": "libvcs 0.40.0 (2026-04-25)"
        },
        {
          "id": "id2",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "pytest-plugin-type-names-are-simplified-521",
          "level": 4,
          "text": "pytest plugin type names are simplified (#521)"
        },
        {
          "id": "what-s-new",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "pytest-plugin-exports-public-type-aliases-521",
          "level": 4,
          "text": "pytest plugin exports public type aliases (#521)"
        },
        {
          "id": "subprocess-runners-accept-timeout-524",
          "level": 4,
          "text": "Subprocess runners accept timeout= (#524)"
        },
        {
          "id": "id3",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "ref-heavy-git-remotes-no-longer-stall-url-lookup-524",
          "level": 4,
          "text": "Ref-heavy Git remotes no longer stall URL lookup (#524)"
        },
        {
          "id": "id4",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "pytest-plugin-type-references-render-as-links-521",
          "level": 4,
          "text": "pytest plugin type references render as links (#521)"
        },
        {
          "id": "api-docs-receive-gp-sphinx-visual-updates-522-523",
          "level": 4,
          "text": "API docs receive gp-sphinx visual updates (#522, #523)"
        },
        {
          "id": "libvcs-0-39-0-2026-02-07",
          "level": 2,
          "text": "libvcs 0.39.0 (2026-02-07)"
        },
        {
          "id": "id5",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "update-repo-returns-structured-sync-results-514",
          "level": 4,
          "text": "update_repo() returns structured sync results (#514)"
        },
        {
          "id": "id6",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "git-sync-reports-more-failure-paths-instead-of-falling-through-514",
          "level": 4,
          "text": "Git sync reports more failure paths instead of falling through (#514)"
        },
        {
          "id": "branch-names-that-look-like-paths-are-disambiguated-514",
          "level": 4,
          "text": "Branch names that look like paths are disambiguated (#514)"
        },
        {
          "id": "git-rev-list-uses-the-all-parameter-514",
          "level": 4,
          "text": "Git.rev_list() uses the _all parameter (#514)"
        },
        {
          "id": "development",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "mercurial-pull-failure-tests-no-longer-damage-shared-fixtures-514",
          "level": 4,
          "text": "Mercurial pull-failure tests no longer damage shared fixtures (#514)"
        },
        {
          "id": "libvcs-0-38-6-2026-01-27",
          "level": 2,
          "text": "libvcs 0.38.6 (2026-01-27)"
        },
        {
          "id": "id7",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "set-gitconfig-also-exports-git-config-global-513",
          "level": 4,
          "text": "set_gitconfig also exports GIT_CONFIG_GLOBAL (#513)"
        },
        {
          "id": "libvcs-0-38-5-2026-01-25",
          "level": 2,
          "text": "libvcs 0.38.5 (2026-01-25)"
        },
        {
          "id": "id8",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "gitconfig-always-writes-the-full-fixture-config-512",
          "level": 4,
          "text": "gitconfig always writes the full fixture config (#512)"
        },
        {
          "id": "libvcs-0-38-4-2026-01-25",
          "level": 2,
          "text": "libvcs 0.38.4 (2026-01-25)"
        },
        {
          "id": "id9",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "git-repo-depends-on-set-home-511",
          "level": 4,
          "text": "git_repo depends on set_home (#511)"
        },
        {
          "id": "libvcs-0-38-3-2026-01-25",
          "level": 2,
          "text": "libvcs 0.38.3 (2026-01-25)"
        },
        {
          "id": "id10",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "git-fixture-config-allows-local-file-submodules-510",
          "level": 4,
          "text": "Git fixture config allows local file:// submodules (#510)"
        },
        {
          "id": "libvcs-0-38-2-2026-01-24",
          "level": 2,
          "text": "libvcs 0.38.2 (2026-01-24)"
        },
        {
          "id": "id11",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "documentation-deployment-uses-oidc-credentials-499",
          "level": 4,
          "text": "Documentation deployment uses OIDC credentials (#499)"
        },
        {
          "id": "id12",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "pypi-publishing-uses-trusted-publisher-499",
          "level": 4,
          "text": "PyPI publishing uses Trusted Publisher (#499)"
        },
        {
          "id": "development-tasks-move-from-makefile-to-justfile-500",
          "level": 4,
          "text": "Development tasks move from Makefile to justfile (#500)"
        },
        {
          "id": "libvcs-0-38-1-2025-12-06",
          "level": 2,
          "text": "libvcs 0.38.1 (2025-12-06)"
        },
        {
          "id": "id13",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "api-docs-warning-cleanup-498",
          "level": 4,
          "text": "API docs warning cleanup (#498)"
        },
        {
          "id": "libvcs-0-38-0-2025-11-30",
          "level": 2,
          "text": "libvcs 0.38.0 (2025-11-30)"
        },
        {
          "id": "id14",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "git-subcommands-use-manager-cmd-objects-465",
          "level": 4,
          "text": "Git subcommands use Manager/Cmd objects (#465)"
        },
        {
          "id": "git-init-covers-newer-init-options-465",
          "level": 4,
          "text": "Git.init() covers newer init options (#465)"
        },
        {
          "id": "id15",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "existing-git-wrappers-receive-correctness-fixes-465",
          "level": 4,
          "text": "Existing Git wrappers receive correctness fixes (#465)"
        },
        {
          "id": "id16",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "git-command-docs-split-by-subcommand-465",
          "level": 4,
          "text": "Git command docs split by subcommand (#465)"
        },
        {
          "id": "libvcs-0-37-0-2025-11-01",
          "level": 2,
          "text": "libvcs 0.37.0 (2025-11-01)"
        },
        {
          "id": "id17",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "python-3-10-is-now-the-minimum-497",
          "level": 4,
          "text": "Python 3.10 is now the minimum (#497)"
        },
        {
          "id": "id18",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "python-3-14-joins-the-test-matrix-496",
          "level": 4,
          "text": "Python 3.14 joins the test matrix (#496)"
        },
        {
          "id": "libvcs-0-36-0-2025-06-22",
          "level": 2,
          "text": "libvcs 0.36.0 (2025-06-22)"
        },
        {
          "id": "id19",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "scp-style-git-urls-are-detected-without-git-ssh-490",
          "level": 4,
          "text": "SCP-style Git URLs are detected without git+ssh:// (#490)"
        },
        {
          "id": "libvcs-0-35-1-2025-06-21",
          "level": 2,
          "text": "libvcs 0.35.1 (2025-06-21)"
        },
        {
          "id": "id20",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "realtime-command-output-reaches-progress-callbacks-again-493",
          "level": 4,
          "text": "Realtime command output reaches progress callbacks again (#493)"
        },
        {
          "id": "id21",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "agent-rules-document-the-local-development-loop-488",
          "level": 4,
          "text": "Agent rules document the local development loop (#488)"
        },
        {
          "id": "libvcs-0-35-0-2025-02-22",
          "level": 2,
          "text": "libvcs 0.35.0 (2025-02-22)"
        },
        {
          "id": "id22",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "run-now-returns-text-output-485",
          "level": 4,
          "text": "run() now returns text output (#485)"
        },
        {
          "id": "id23",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "deferred-annotations-become-the-project-default-483",
          "level": 4,
          "text": "Deferred annotations become the project default (#483)"
        },
        {
          "id": "libvcs-0-34-0-2024-11-22",
          "level": 2,
          "text": "libvcs 0.34.0 (2024-11-22)"
        },
        {
          "id": "id24",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "package-management-moves-from-poetry-to-uv-479",
          "level": 4,
          "text": "Package management moves from Poetry to uv (#479)"
        },
        {
          "id": "build-backend-moves-to-hatchling-479",
          "level": 4,
          "text": "Build backend moves to hatchling (#479)"
        },
        {
          "id": "libvcs-0-33-0-2024-10-13",
          "level": 2,
          "text": "libvcs 0.33.0 (2024-10-13)"
        },
        {
          "id": "id25",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "python-3-13-is-supported-477",
          "level": 4,
          "text": "Python 3.13 is supported (#477)"
        },
        {
          "id": "pytest-plugin-authorship-fixtures-476",
          "level": 4,
          "text": "pytest plugin authorship fixtures (#476)"
        },
        {
          "id": "libvcs-0-32-3-2024-10-13",
          "level": 2,
          "text": "libvcs 0.32.3 (2024-10-13)"
        },
        {
          "id": "id26",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "remote-repository-post-init-callbacks-receive-vcs-config-475",
          "level": 4,
          "text": "Remote repository post-init callbacks receive VCS config (#475)"
        },
        {
          "id": "libvcs-0-32-2-2024-10-13",
          "level": 2,
          "text": "libvcs 0.32.2 (2024-10-13)"
        },
        {
          "id": "id27",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "git-repo-and-hg-repo-apply-their-config-fixtures-475",
          "level": 4,
          "text": "git_repo and hg_repo apply their config fixtures (#475)"
        },
        {
          "id": "libvcs-0-32-1-2024-10-12",
          "level": 2,
          "text": "libvcs 0.32.1 (2024-10-12)"
        },
        {
          "id": "id28",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "accidental-git-command-work-is-reverted",
          "level": 4,
          "text": "Accidental Git command work is reverted"
        },
        {
          "id": "libvcs-0-32-0-2024-10-12",
          "level": 2,
          "text": "libvcs 0.32.0 (2024-10-12)"
        },
        {
          "id": "id29",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "git-and-mercurial-config-fixtures-are-session-scoped-475",
          "level": 4,
          "text": "Git and Mercurial config fixtures are session-scoped (#475)"
        },
        {
          "id": "id30",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "pytest-plugin-docs-cover-the-new-config-flow-475",
          "level": 4,
          "text": "pytest plugin docs cover the new config flow (#475)"
        },
        {
          "id": "libvcs-0-31-0-2024-10-12",
          "level": 2,
          "text": "libvcs 0.31.0 (2024-10-12)"
        },
        {
          "id": "id31",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "pytest-plugin-repositories-are-cached-from-starter-repos-472",
          "level": 4,
          "text": "pytest plugin repositories are cached from starter repos (#472)"
        },
        {
          "id": "git-local-clone-is-renamed-to-example-git-repo-468",
          "level": 4,
          "text": "git_local_clone is renamed to example_git_repo (#468)"
        },
        {
          "id": "listing-helpers-are-named-ls-466",
          "level": 4,
          "text": "Listing helpers are named ls() (#466)"
        },
        {
          "id": "libvcs-0-30-1-2024-06-18",
          "level": 2,
          "text": "libvcs 0.30.1 (2024-06-18)"
        },
        {
          "id": "id32",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "aws-codecommit-detection-handles-url-registry-details-464",
          "level": 4,
          "text": "AWS CodeCommit detection handles URL registry details (#464)"
        },
        {
          "id": "id33",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "readme-receives-a-broad-refresh-464",
          "level": 4,
          "text": "README receives a broad refresh (#464)"
        },
        {
          "id": "libvcs-0-30-0-2024-06-18",
          "level": 2,
          "text": "libvcs 0.30.0 (2024-06-18)"
        },
        {
          "id": "id34",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "git-url-regex-constants-are-renamed-and-split-463",
          "level": 4,
          "text": "Git URL regex constants are renamed and split (#463)"
        },
        {
          "id": "id35",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "aws-codecommit-urls-are-parsed-as-git-urls-443",
          "level": 4,
          "text": "AWS CodeCommit URLs are parsed as Git URLs (#443)"
        },
        {
          "id": "id36",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "url-docs-gain-richer-links-443",
          "level": 4,
          "text": "URL docs gain richer links (#443)"
        },
        {
          "id": "id37",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "poetry-and-ruff-are-refreshed-460",
          "level": 4,
          "text": "Poetry and Ruff are refreshed (#460)"
        },
        {
          "id": "libvcs-0-29-0-2024-03-24",
          "level": 2,
          "text": "libvcs 0.29.0 (2024-03-24)"
        },
        {
          "id": "id38",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "ruff-cleanup-is-applied-across-the-codebase-458",
          "level": 4,
          "text": "Ruff cleanup is applied across the codebase (#458)"
        },
        {
          "id": "ruff-and-poetry-are-updated-457",
          "level": 4,
          "text": "Ruff and Poetry are updated (#457)"
        },
        {
          "id": "libvcs-0-28-2-2024-02-17",
          "level": 2,
          "text": "libvcs 0.28.2 (2024-02-17)"
        },
        {
          "id": "id39",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "git-rev-list-expands-max-count-correctly-455",
          "level": 4,
          "text": "Git.rev_list() expands --max-count correctly (#455)"
        },
        {
          "id": "id40",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "ci-actions-move-to-node-20-releases-456",
          "level": 4,
          "text": "CI actions move to Node 20 releases (#456)"
        },
        {
          "id": "libvcs-0-28-1-2024-02-08",
          "level": 2,
          "text": "libvcs 0.28.1 (2024-02-08)"
        },
        {
          "id": "id41",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "source-distributions-include-docs-and-changelog-files-454",
          "level": 4,
          "text": "Source distributions include docs and changelog files (#454)"
        },
        {
          "id": "libvcs-0-28-0-2024-02-07",
          "level": 2,
          "text": "libvcs 0.28.0 (2024-02-07)"
        },
        {
          "id": "id42",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "querylist-generic-support-improves-453",
          "level": 4,
          "text": "QueryList generic support improves (#453)"
        },
        {
          "id": "libvcs-0-27-0-2024-02-06",
          "level": 2,
          "text": "libvcs 0.27.0 (2024-02-06)"
        },
        {
          "id": "id43",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "more-ruff-rule-families-are-enabled-514",
          "level": 4,
          "text": "More Ruff rule families are enabled (#514)"
        },
        {
          "id": "codeql-uses-github-s-default-setup",
          "level": 4,
          "text": "CodeQL uses GitHub’s default setup"
        },
        {
          "id": "libvcs-0-26-0-2023-11-26",
          "level": 2,
          "text": "libvcs 0.26.0 (2023-11-26)"
        },
        {
          "id": "id44",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "pytest-plugin-protocol-names-are-simplified-450",
          "level": 4,
          "text": "pytest plugin protocol names are simplified (#450)"
        },
        {
          "id": "id45",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "dead-svn-merge-list-wrapper-is-removed-450",
          "level": 4,
          "text": "Dead SVN merge-list wrapper is removed (#450)"
        },
        {
          "id": "git-config-docs-are-corrected-450",
          "level": 4,
          "text": "Git.config docs are corrected (#450)"
        },
        {
          "id": "id46",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "public-apis-gain-docstrings-449",
          "level": 4,
          "text": "Public APIs gain docstrings (#449)"
        },
        {
          "id": "id47",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "pydocstyle-joins-the-ruff-rule-set-449",
          "level": 4,
          "text": "pydocstyle joins the Ruff rule set (#449)"
        },
        {
          "id": "pytest-watcher-is-configured-450",
          "level": 4,
          "text": "pytest-watcher is configured (#450)"
        },
        {
          "id": "libvcs-0-25-1-2023-11-23",
          "level": 2,
          "text": "libvcs 0.25.1 (2023-11-23)"
        },
        {
          "id": "id48",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "gp-libs-moves-to-test-dependencies",
          "level": 4,
          "text": "gp-libs moves to test dependencies"
        },
        {
          "id": "libvcs-0-25-0-2023-11-19",
          "level": 2,
          "text": "libvcs 0.25.0 (2023-11-19)"
        },
        {
          "id": "id49",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "formatting-moves-from-black-to-ruff-format-448",
          "level": 4,
          "text": "Formatting moves from Black to Ruff format (#448)"
        },
        {
          "id": "poetry-dependency-groups-are-corrected",
          "level": 4,
          "text": "Poetry dependency groups are corrected"
        },
        {
          "id": "poetry-moves-to-1-7-0",
          "level": 4,
          "text": "Poetry moves to 1.7.0"
        },
        {
          "id": "ci-dependency-actions-are-refreshed",
          "level": 4,
          "text": "CI dependency actions are refreshed"
        },
        {
          "id": "libvcs-0-24-0-2023-10-22",
          "level": 2,
          "text": "libvcs 0.24.0 (2023-10-22)"
        },
        {
          "id": "id50",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "git-remote-urls-preserve-after-the-protocol-446",
          "level": 4,
          "text": "Git remote URLs preserve @ after the protocol (#446)"
        },
        {
          "id": "id51",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "pytest-configuration-moves-to-pyproject-toml-441",
          "level": 4,
          "text": "pytest configuration moves to pyproject.toml (#441)"
        },
        {
          "id": "ruff-s-eradicate-rule-is-disabled",
          "level": 4,
          "text": "Ruff’s eradicate rule is disabled"
        },
        {
          "id": "typing-is-imported-as-t-in-query-list-internals-439",
          "level": 4,
          "text": "typing is imported as t in query-list internals (#439)"
        },
        {
          "id": "libvcs-0-23-0-2023-08-20",
          "level": 2,
          "text": "libvcs 0.23.0 (2023-08-20)"
        },
        {
          "id": "id52",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "additional-ruff-rules-are-applied-438",
          "level": 4,
          "text": "Additional Ruff rules are applied (#438)"
        },
        {
          "id": "libvcs-0-23-0post0-2023-08-20",
          "level": 2,
          "text": "libvcs 0.23.0post0 (2023-08-20)"
        },
        {
          "id": "id53",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "cleaned-up-comments-are-corrected",
          "level": 4,
          "text": "Cleaned-up comments are corrected"
        },
        {
          "id": "libvcs-0-22-2-2023-08-20",
          "level": 2,
          "text": "libvcs 0.22.2 (2023-08-20)"
        },
        {
          "id": "id54",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "subprocesscommand-accepts-the-typed-text-parameter",
          "level": 4,
          "text": "SubprocessCommand accepts the typed text parameter"
        },
        {
          "id": "libvcs-0-22-1-2023-05-28",
          "level": 2,
          "text": "libvcs 0.22.1 (2023-05-28)"
        },
        {
          "id": "id55",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "black-returns-while-ruff-formatting-matures",
          "level": 4,
          "text": "Black returns while Ruff formatting matures"
        },
        {
          "id": "libvcs-0-22-0-2023-05-27",
          "level": 2,
          "text": "libvcs 0.22.0 (2023-05-27)"
        },
        {
          "id": "id56",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "ruff-replaces-several-python-lint-format-tools",
          "level": 4,
          "text": "Ruff replaces several Python lint/format tools"
        },
        {
          "id": "poetry-is-updated-to-1-5-0",
          "level": 4,
          "text": "Poetry is updated to 1.5.0"
        },
        {
          "id": "libvcs-0-21-2-2023-04-07",
          "level": 2,
          "text": "libvcs 0.21.2 (2023-04-07)"
        },
        {
          "id": "id57",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "skipdefaultfieldsreprmixin-types-under-mypy-1-2-0",
          "level": 4,
          "text": "SkipDefaultFieldsReprMixin types under mypy 1.2.0"
        },
        {
          "id": "id58",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "mypy-is-updated-to-1-2-0",
          "level": 4,
          "text": "mypy is updated to 1.2.0"
        },
        {
          "id": "libvcs-0-21-1-2023-03-15",
          "level": 2,
          "text": "libvcs 0.21.1 (2023-03-15)"
        },
        {
          "id": "id59",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "runtime-imports-no-longer-need-typing-extensions",
          "level": 4,
          "text": "Runtime imports no longer need typing_extensions"
        },
        {
          "id": "libvcs-0-21-0-2023-03-15",
          "level": 2,
          "text": "libvcs 0.21.0 (2023-03-15)"
        },
        {
          "id": "id60",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "querylist-get-retrieves-one-matching-object-435",
          "level": 4,
          "text": "QueryList.get() retrieves one matching object (#435)"
        },
        {
          "id": "id61",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "typing-extensions-is-no-longer-a-required-runtime-dependency-437",
          "level": 4,
          "text": "typing_extensions is no longer a required runtime dependency (#437)"
        },
        {
          "id": "libvcs-0-20-0-2022-10-31",
          "level": 2,
          "text": "libvcs 0.20.0 (2022-10-31)"
        },
        {
          "id": "id62",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "python-3-11-is-supported-433",
          "level": 4,
          "text": "Python 3.11 is supported (#433)"
        },
        {
          "id": "url-rule-maps-are-class-attributes-433",
          "level": 4,
          "text": "URL rule maps are class attributes (#433)"
        },
        {
          "id": "libvcs-0-19-1-2022-10-23",
          "level": 2,
          "text": "libvcs 0.19.1 (2022-10-23)"
        },
        {
          "id": "id63",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "git-command-docs-split-into-subcommand-pages-432",
          "level": 4,
          "text": "Git command docs split into subcommand pages (#432)"
        },
        {
          "id": "id64",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "git-sync-tests-use-updated-fixtures-432",
          "level": 4,
          "text": "Git sync tests use updated fixtures (#432)"
        },
        {
          "id": "libvcs-0-19-0-2022-10-23",
          "level": 2,
          "text": "libvcs 0.19.0 (2022-10-23)"
        },
        {
          "id": "id65",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "sync-uses-the-command-library-430",
          "level": 4,
          "text": "Sync uses the command library (#430)"
        },
        {
          "id": "more-vcs-command-wrappers-are-available-430",
          "level": 4,
          "text": "More VCS command wrappers are available (#430)"
        },
        {
          "id": "libvcs-0-18-1-2022-10-23",
          "level": 2,
          "text": "libvcs 0.18.1 (2022-10-23)"
        },
        {
          "id": "id66",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "citation-and-docs-updates",
          "level": 4,
          "text": "Citation and docs updates"
        },
        {
          "id": "id67",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "development-dependencies-are-refreshed",
          "level": 4,
          "text": "Development dependencies are refreshed"
        },
        {
          "id": "libvcs-0-18-0-2022-10-09",
          "level": 2,
          "text": "libvcs 0.18.0 (2022-10-09)"
        },
        {
          "id": "id68",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "url-matcher-weights-control-parser-precedence-428",
          "level": 4,
          "text": "URL matcher weights control parser precedence (#428)"
        },
        {
          "id": "libvcs-0-17-0-2022-09-25",
          "level": 2,
          "text": "libvcs 0.17.0 (2022-09-25)"
        },
        {
          "id": "id69",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "url-matcher-types-are-renamed-417",
          "level": 4,
          "text": "URL matcher types are renamed (#417)"
        },
        {
          "id": "id70",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "url-registry-detects-vcs-type-from-a-url-420",
          "level": 4,
          "text": "URL registry detects VCS type from a URL (#420)"
        },
        {
          "id": "pytest-repository-factories-can-customize-git-init-args-426",
          "level": 4,
          "text": "pytest repository factories can customize Git init args (#426)"
        },
        {
          "id": "mercurial-and-subversion-url-parser-coverage-expands-423",
          "level": 4,
          "text": "Mercurial and Subversion URL parser coverage expands (#423)"
        },
        {
          "id": "id71",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "git-sync-handles-untracked-only-working-trees-425",
          "level": 4,
          "text": "Git sync handles untracked-only working trees (#425)"
        },
        {
          "id": "id72",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "test-and-coverage-configuration-are-consolidated-421",
          "level": 4,
          "text": "Test and coverage configuration are consolidated (#421)"
        },
        {
          "id": "libvcs-0-16-5-2022-09-21",
          "level": 2,
          "text": "libvcs 0.16.5 (2022-09-21)"
        },
        {
          "id": "id73",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "pytest-imports-use-public-apis-418",
          "level": 4,
          "text": "pytest imports use public APIs (#418)"
        },
        {
          "id": "libvcs-0-16-4-2022-09-18",
          "level": 2,
          "text": "libvcs 0.16.4 (2022-09-18)"
        },
        {
          "id": "id74",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "poetry-moves-to-the-1-2-series",
          "level": 4,
          "text": "Poetry moves to the 1.2 series"
        },
        {
          "id": "libvcs-0-16-3-2022-09-18",
          "level": 2,
          "text": "libvcs 0.16.3 (2022-09-18)"
        },
        {
          "id": "id75",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "querylist-object-lookups-work-correctly-415",
          "level": 4,
          "text": "QueryList object lookups work correctly (#415)"
        },
        {
          "id": "id76",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "querylist-examples-cover-object-lookups-415",
          "level": 4,
          "text": "QueryList examples cover object lookups (#415)"
        },
        {
          "id": "id77",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "pytest-plugin-and-querylist-tests-expand-413-414",
          "level": 4,
          "text": "pytest plugin and QueryList tests expand (#413, #414)"
        },
        {
          "id": "ci-avoids-unnecessary-work-416",
          "level": 4,
          "text": "CI avoids unnecessary work (#416)"
        },
        {
          "id": "libvcs-0-16-2-2022-09-11",
          "level": 2,
          "text": "libvcs 0.16.2 (2022-09-11)"
        },
        {
          "id": "id78",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "faker-is-no-longer-required-412",
          "level": 4,
          "text": "Faker is no longer required (#412)"
        },
        {
          "id": "libvcs-0-16-1-2022-09-11",
          "level": 2,
          "text": "libvcs 0.16.1 (2022-09-11)"
        },
        {
          "id": "id79",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "faker-is-added-as-a-short-term-dependency-411",
          "level": 4,
          "text": "Faker is added as a short-term dependency (#411)"
        },
        {
          "id": "libvcs-0-16-0-2022-09-11",
          "level": 2,
          "text": "libvcs 0.16.0 (2022-09-11)"
        },
        {
          "id": "id80",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "pytest-plugin-creates-temporary-vcs-repositories-409",
          "level": 4,
          "text": "pytest plugin creates temporary VCS repositories (#409)"
        },
        {
          "id": "libvcs-0-15-0-2022-09-11",
          "level": 2,
          "text": "libvcs 0.15.0 (2022-09-11)"
        },
        {
          "id": "id81",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "packages-and-sync-classes-are-renamed-408",
          "level": 4,
          "text": "Packages and sync classes are renamed (#408)"
        },
        {
          "id": "custom-filesystem-helpers-are-deprecated-or-removed-397-399",
          "level": 4,
          "text": "Custom filesystem helpers are deprecated or removed (#397, #399)"
        },
        {
          "id": "id82",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "changelog-and-api-docs-use-gp-libs-utilities-403",
          "level": 4,
          "text": "Changelog and API docs use gp-libs utilities (#403)"
        },
        {
          "id": "id83",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "source-code-moves-to-a-src-layout-407",
          "level": 4,
          "text": "Source code moves to a src/ layout (#407)"
        },
        {
          "id": "additional-flake8-plugins-are-added-379-401-402",
          "level": 4,
          "text": "Additional flake8 plugins are added (#379, #401, #402)"
        },
        {
          "id": "libvcs-0-14-0-2022-07-31",
          "level": 2,
          "text": "libvcs 0.14.0 (2022-07-31)"
        },
        {
          "id": "id84",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "deprecated-shortcuts-and-old-parser-types-are-removed-377-372",
          "level": 4,
          "text": "Deprecated shortcuts and old parser types are removed (#377, #372)"
        },
        {
          "id": "insecure-or-redundant-git-url-schemes-are-removed-379-378-380",
          "level": 4,
          "text": "Insecure or redundant Git URL schemes are removed (#379, #378, #380)"
        },
        {
          "id": "gitsync-flat-is-removed-391",
          "level": 4,
          "text": "GitSync(flat=...) is removed (#391)"
        },
        {
          "id": "id85",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "url-parser-framework-376-381-384-386",
          "level": 4,
          "text": "URL parser framework (#376, #381, #384, #386)"
        },
        {
          "id": "strict-mypy-compliance-390",
          "level": 4,
          "text": "Strict mypy compliance (#390)"
        },
        {
          "id": "id86",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "mercurial-cloning-fix-is-backported-from-0-13-1",
          "level": 4,
          "text": "Mercurial cloning fix is backported from 0.13.1"
        },
        {
          "id": "id87",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "project-branding-and-parser-docs-are-refreshed",
          "level": 4,
          "text": "Project branding and parser docs are refreshed"
        },
        {
          "id": "libvcs-0-13-6-2022-06-18",
          "level": 2,
          "text": "libvcs 0.13.6 (2022-06-18)"
        },
        {
          "id": "id88",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "create-project-moves-to-the-internal-shortcuts-module",
          "level": 4,
          "text": "create_project moves to the internal shortcuts module"
        },
        {
          "id": "libvcs-0-13-5-2022-06-18",
          "level": 2,
          "text": "libvcs 0.13.5 (2022-06-18)"
        },
        {
          "id": "id89",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "shortcut-deprecations-are-documented",
          "level": 4,
          "text": "Shortcut deprecations are documented"
        },
        {
          "id": "libvcs-0-13-4-2022-06-18",
          "level": 2,
          "text": "libvcs 0.13.4 (2022-06-18)"
        },
        {
          "id": "id90",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "vcsliteral-becomes-vcsliteral",
          "level": 4,
          "text": "VcsLiteral becomes VCSLiteral"
        },
        {
          "id": "libvcs-0-13-3-2022-06-18",
          "level": 2,
          "text": "libvcs 0.13.3 (2022-06-18)"
        },
        {
          "id": "id91",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "create-project-returns-typed-projects-in-overloads",
          "level": 4,
          "text": "create_project() returns typed projects in overloads"
        },
        {
          "id": "libvcs-0-13-2-2022-06-12",
          "level": 2,
          "text": "libvcs 0.13.2 (2022-06-12)"
        },
        {
          "id": "id92",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "git-project-remote-overloads-are-added",
          "level": 4,
          "text": "Git project remote overloads are added"
        },
        {
          "id": "libvcs-0-13-1-2022-06-01",
          "level": 2,
          "text": "libvcs 0.13.1 (2022-06-01)"
        },
        {
          "id": "id93",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "mercurial-repositories-clone-correctly",
          "level": 4,
          "text": "Mercurial repositories clone correctly"
        },
        {
          "id": "libvcs-0-13-0-jane-2022-05-30",
          "level": 2,
          "text": "libvcs 0.13.0, “Jane” (2022-05-30)"
        },
        {
          "id": "id94",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "command-internals-move-under-internal-343-345",
          "level": 4,
          "text": "Command internals move under _internal (#343, #345)"
        },
        {
          "id": "run-mirrors-subprocess-popen-naming-361",
          "level": 4,
          "text": "run() mirrors subprocess.Popen naming (#361)"
        },
        {
          "id": "sync-objects-use-keyword-only-construction-364-366",
          "level": 4,
          "text": "Sync objects use keyword-only construction (#364, #366)"
        },
        {
          "id": "base-sync-attributes-are-cleaned-up",
          "level": 4,
          "text": "Base sync attributes are cleaned up"
        },
        {
          "id": "id95",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "more-command-wrappers-land-346-360",
          "level": 4,
          "text": "More command wrappers land (#346, #360)"
        },
        {
          "id": "id96",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "command-argument-pass-through-is-corrected-360-365",
          "level": 4,
          "text": "Command argument pass-through is corrected (#360, #365)"
        },
        {
          "id": "id97",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "developer-docs-cover-mypy-and-typed-helpers-362",
          "level": 4,
          "text": "Developer docs cover mypy and typed helpers (#362)"
        },
        {
          "id": "id98",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "mypy-support-lands-362",
          "level": 4,
          "text": "mypy support lands (#362)"
        },
        {
          "id": "subprocess-helpers-become-dataclass-backed-336",
          "level": 4,
          "text": "Subprocess helpers become dataclass-backed (#336)"
        },
        {
          "id": "libvcs-0-12-4-2022-05-30",
          "level": 2,
          "text": "libvcs 0.12.4 (2022-05-30)"
        },
        {
          "id": "id99",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "mercurial-and-svn-command-arguments-pass-through-correctly-365",
          "level": 4,
          "text": "Mercurial and SVN command arguments pass through correctly (#365)"
        },
        {
          "id": "libvcs-0-12-3-2022-05-28",
          "level": 2,
          "text": "libvcs 0.12.3 (2022-05-28)"
        },
        {
          "id": "id100",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "git-command-arguments-pass-through-correctly-360",
          "level": 4,
          "text": "Git command arguments pass through correctly (#360)"
        },
        {
          "id": "libvcs-0-12-2-2022-05-10",
          "level": 2,
          "text": "libvcs 0.12.2 (2022-05-10)"
        },
        {
          "id": "id101",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "trove-classifiers-are-updated",
          "level": 4,
          "text": "Trove classifiers are updated"
        },
        {
          "id": "libvcs-0-12-1-2022-05-10",
          "level": 2,
          "text": "libvcs 0.12.1 (2022-05-10)"
        },
        {
          "id": "id102",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "py-typed-is-included",
          "level": 4,
          "text": "py.typed is included"
        },
        {
          "id": "libvcs-0-12-0-nimbus-2022-04-24",
          "level": 2,
          "text": "libvcs 0.12.0, “Nimbus” (2022-04-24)"
        },
        {
          "id": "id103",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "repository-classes-become-sync-classes-327-324",
          "level": 4,
          "text": "Repository classes become sync classes (#327, #324)"
        },
        {
          "id": "remote-and-logging-internals-are-reorganized-322-329",
          "level": 4,
          "text": "Remote and logging internals are reorganized (#322, #329)"
        },
        {
          "id": "id104",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "experimental-command-wrappers-319",
          "level": 4,
          "text": "Experimental command wrappers (#319)"
        },
        {
          "id": "git-sync-can-manage-configured-remotes",
          "level": 4,
          "text": "Git sync can manage configured remotes"
        },
        {
          "id": "dependencies",
          "level": 3,
          "text": "Dependencies"
        },
        {
          "id": "python-3-7-and-3-8-are-dropped-308",
          "level": 4,
          "text": "Python 3.7 and 3.8 are dropped (#308)"
        },
        {
          "id": "id105",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "api-docs-split-into-separate-pages-321-328",
          "level": 4,
          "text": "API docs split into separate pages (#321, #328)"
        },
        {
          "id": "id106",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "release-and-test-tooling-are-modernized-303-309-316-321",
          "level": 4,
          "text": "Release and test tooling are modernized (#303, #309, #316, #321)"
        },
        {
          "id": "libvcs-0-11-1-2022-03-12",
          "level": 2,
          "text": "libvcs 0.11.1 (2022-03-12)"
        },
        {
          "id": "id107",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "cve-2022-21187-mercurial-url-aliases-no-longer-execute-shell-commands-306",
          "level": 4,
          "text": "CVE-2022-21187: Mercurial URL aliases no longer execute shell commands (#306)"
        },
        {
          "id": "id108",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "docs-move-to-furo",
          "level": 4,
          "text": "Docs move to Furo"
        },
        {
          "id": "id109",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "tests-move-from-tmp-dir-to-tmp-path",
          "level": 4,
          "text": "Tests move from tmp_dir to tmp_path"
        },
        {
          "id": "libvcs-0-11-0-phebe-2022-01-08",
          "level": 2,
          "text": "libvcs 0.11.0, “Phebe” (2022-01-08)"
        },
        {
          "id": "id110",
          "level": 3,
          "text": "Dependencies"
        },
        {
          "id": "python-3-10-is-supported-and-python-3-6-is-dropped-300",
          "level": 4,
          "text": "Python 3.10 is supported and Python 3.6 is dropped (#300)"
        },
        {
          "id": "id111",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "poetry-and-pre-commit-tooling-are-refreshed-300",
          "level": 4,
          "text": "Poetry and pre-commit tooling are refreshed (#300)"
        },
        {
          "id": "libvcs-0-10-1-2021-11-30",
          "level": 2,
          "text": "libvcs 0.10.1 (2021-11-30)"
        },
        {
          "id": "id112",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "remote-branches-are-checked-out-before-rebase-295",
          "level": 4,
          "text": "Remote branches are checked out before rebase (#295)"
        },
        {
          "id": "pip-url-revisions-are-handled-correctly-293",
          "level": 4,
          "text": "Pip URL revisions are handled correctly (#293)"
        },
        {
          "id": "id113",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "poetry-1-1-lockfile-support-is-refreshed-279",
          "level": 4,
          "text": "Poetry 1.1 lockfile support is refreshed (#279)"
        },
        {
          "id": "libvcs-0-10-2021-06-16",
          "level": 2,
          "text": "libvcs 0.10 (2021-06-16)"
        },
        {
          "id": "id114",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "changelog-source-moves-to-markdown-311",
          "level": 4,
          "text": "Changelog source moves to Markdown (#311)"
        },
        {
          "id": "libvcs-0-9-2021-06-14",
          "level": 2,
          "text": "libvcs 0.9 (2021-06-14)"
        },
        {
          "id": "id115",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "repository-objects-require-an-explicit-repository-directory-271",
          "level": 4,
          "text": "Repository objects require an explicit repository directory (#271)"
        },
        {
          "id": "id116",
          "level": 3,
          "text": "Dependencies"
        },
        {
          "id": "python-2-7-support-is-removed-271",
          "level": 4,
          "text": "Python 2.7 support is removed (#271)"
        },
        {
          "id": "id117",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "black-and-annotations-are-adopted-271",
          "level": 4,
          "text": "Black and annotations are adopted (#271)"
        },
        {
          "id": "libvcs-0-5-2020-08-11",
          "level": 2,
          "text": "libvcs 0.5 (2020-08-11)"
        },
        {
          "id": "id118",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "documentation-moves-to-github-actions-and-s3-267",
          "level": 4,
          "text": "Documentation moves to GitHub Actions and S3 (#267)"
        },
        {
          "id": "id119",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "poetry-builds-and-publishes-packages-270",
          "level": 4,
          "text": "Poetry builds and publishes packages (#270)"
        },
        {
          "id": "libvcs-0-4-4-2020-08-05",
          "level": 2,
          "text": "libvcs 0.4.4 (2020-08-05)"
        },
        {
          "id": "id120",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "baserepo-no-longer-stores-arbitrary-kwargs-268",
          "level": 4,
          "text": "BaseRepo no longer stores arbitrary kwargs (#268)"
        },
        {
          "id": "libvcs-0-4-3-2020-08-01",
          "level": 2,
          "text": "libvcs 0.4.3 (2020-08-01)"
        },
        {
          "id": "id121",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "git-status-handles-branch-names-with-special-characters",
          "level": 4,
          "text": "Git status handles branch names with special characters"
        },
        {
          "id": "libvcs-0-4-2-2020-08-01",
          "level": 2,
          "text": "libvcs 0.4.2 (2020-08-01)"
        },
        {
          "id": "id122",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "git-status-returns-structured-information",
          "level": 4,
          "text": "Git status returns structured information"
        },
        {
          "id": "id123",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "unpushed-upstream-branches-no-longer-break-remote-detection",
          "level": 4,
          "text": "Unpushed upstream branches no longer break remote detection"
        },
        {
          "id": "libvcs-0-4-1-2020-08-01",
          "level": 2,
          "text": "libvcs 0.4.1 (2020-08-01)"
        },
        {
          "id": "id124",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "debug-logging-noise-is-removed",
          "level": 4,
          "text": "Debug logging noise is removed"
        },
        {
          "id": "libvcs-0-4-2020-08-01",
          "level": 2,
          "text": "libvcs 0.4 (2020-08-01)"
        },
        {
          "id": "id125",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "git-remote-methods-are-renamed-and-made-explicit",
          "level": 4,
          "text": "Git remote methods are renamed and made explicit"
        },
        {
          "id": "id126",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "git-repository-helpers-expose-current-remote-and-git-version",
          "level": 4,
          "text": "Git repository helpers expose current remote and Git version"
        },
        {
          "id": "libvcs-0-3-3-2020-07-29",
          "level": 2,
          "text": "libvcs 0.3.3 (2020-07-29)"
        },
        {
          "id": "id127",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "git-obtain-can-overwrite-an-existing-remote",
          "level": 4,
          "text": "Git obtain can overwrite an existing remote"
        },
        {
          "id": "libvcs-0-3-2-2020-07-26",
          "level": 2,
          "text": "libvcs 0.3.2 (2020-07-26)"
        },
        {
          "id": "id128",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "gitrepo-remote-set-updates-remote-urls-correctly",
          "level": 4,
          "text": "GitRepo.remote_set() updates remote URLs correctly"
        },
        {
          "id": "libvcs-0-3-1post1-2020-07-26",
          "level": 2,
          "text": "libvcs 0.3.1post1 (2020-07-26)"
        },
        {
          "id": "id129",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "package-version-metadata-is-corrected",
          "level": 4,
          "text": "Package version metadata is corrected"
        },
        {
          "id": "libvcs-0-3-1-2020-07-25",
          "level": 2,
          "text": "libvcs 0.3.1 (2020-07-25)"
        },
        {
          "id": "id130",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "python-3-8-subprocess-warnings-are-fixed",
          "level": 4,
          "text": "Python 3.8 subprocess warnings are fixed"
        },
        {
          "id": "id131",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "packaging-moves-from-pipfile-to-poetry-296",
          "level": 4,
          "text": "Packaging moves from Pipfile to Poetry (#296)"
        },
        {
          "id": "libvcs-0-3-0-2018-03-12",
          "level": 2,
          "text": "libvcs 0.3.0 (2018-03-12)"
        },
        {
          "id": "id132",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "vcs-objects-initialize-correctly-on-ubuntu-18-04",
          "level": 4,
          "text": "VCS objects initialize correctly on Ubuntu 18.04"
        },
        {
          "id": "id133",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "project-metadata-follows-the-vcs-python-organization",
          "level": 4,
          "text": "Project metadata follows the vcs-python organization"
        },
        {
          "id": "libvcs-0-2-3-2016-12-22",
          "level": 2,
          "text": "libvcs 0.2.3 (2016-12-22)"
        },
        {
          "id": "id134",
          "level": 3,
          "text": "Documentation"
        },
        {
          "id": "documentation-points-to-libvcs-git-pull-com",
          "level": 4,
          "text": "Documentation points to libvcs.git-pull.com"
        },
        {
          "id": "id135",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "test-and-docs-dependencies-are-pinned",
          "level": 4,
          "text": "Test and docs dependencies are pinned"
        },
        {
          "id": "libvcs-0-2-2-2016-11-23",
          "level": 2,
          "text": "libvcs 0.2.2 (2016-11-23)"
        },
        {
          "id": "id136",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "unused-support-module-bug-is-fixed-for-vcspull",
          "level": 4,
          "text": "Unused support-module bug is fixed for vcspull"
        },
        {
          "id": "libvcs-0-2-1-2016-09-13",
          "level": 2,
          "text": "libvcs 0.2.1 (2016-09-13)"
        },
        {
          "id": "id137",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "which-handles-missing-executables",
          "level": 4,
          "text": "which() handles missing executables"
        },
        {
          "id": "tests-handle-missing-vcs-binaries-better",
          "level": 4,
          "text": "Tests handle missing VCS binaries better"
        },
        {
          "id": "id138",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "pytest-and-test-dependencies-are-refreshed",
          "level": 4,
          "text": "pytest and test dependencies are refreshed"
        },
        {
          "id": "libvcs-0-2-0-2016-06-24",
          "level": 2,
          "text": "libvcs 0.2.0 (2016-06-24)"
        },
        {
          "id": "id139",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "command-progress-callbacks-stream-realtime-output-9",
          "level": 4,
          "text": "Command progress callbacks stream realtime output (#9)"
        },
        {
          "id": "id140",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "git-update-handles-an-unbound-local-path-11",
          "level": 4,
          "text": "Git update handles an unbound local path (#11)"
        },
        {
          "id": "id141",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "pypy-support-and-tests-expand-9",
          "level": 4,
          "text": "PyPy support and tests expand (#9)"
        },
        {
          "id": "libvcs-0-1-7-2016-06-21",
          "level": 2,
          "text": "libvcs 0.1.7 (2016-06-21)"
        },
        {
          "id": "id142",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "check-returncode-is-available-on-run-results",
          "level": 4,
          "text": "check_returncode is available on run results"
        },
        {
          "id": "id143",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "command-buffering-is-removed",
          "level": 4,
          "text": "Command buffering is removed"
        },
        {
          "id": "libvcs-0-1-6-2016-06-21",
          "level": 2,
          "text": "libvcs 0.1.6 (2016-06-21)"
        },
        {
          "id": "id144",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "library-logging-stops-configuring-handlers",
          "level": 4,
          "text": "Library logging stops configuring handlers"
        },
        {
          "id": "id145",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "colorama-is-removed",
          "level": 4,
          "text": "colorama is removed"
        },
        {
          "id": "libvcs-0-1-5-2016-06-21",
          "level": 2,
          "text": "libvcs 0.1.5 (2016-06-21)"
        },
        {
          "id": "id146",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "repository-context-reaches-the-logging-adapter",
          "level": 4,
          "text": "Repository context reaches the logging adapter"
        },
        {
          "id": "libvcs-0-1-4-2016-06-20",
          "level": 2,
          "text": "libvcs 0.1.4 (2016-06-20)"
        },
        {
          "id": "id147",
          "level": 3,
          "text": "Fixes"
        },
        {
          "id": "print-stdout-on-progress-end-signature-matches-callers",
          "level": 4,
          "text": "print_stdout_on_progress_end signature matches callers"
        },
        {
          "id": "libvcs-0-1-3-2016-06-20",
          "level": 2,
          "text": "libvcs 0.1.3 (2016-06-20)"
        },
        {
          "id": "id148",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "create-repo-creates-vcs-objects-from-urls",
          "level": 4,
          "text": "create_repo creates VCS objects from URLs"
        },
        {
          "id": "libvcs-0-1-2-2016-06-20",
          "level": 2,
          "text": "libvcs 0.1.2 (2016-06-20)"
        },
        {
          "id": "id149",
          "level": 3,
          "text": "Breaking changes"
        },
        {
          "id": "repository-constructors-use-repo-dir",
          "level": 4,
          "text": "Repository constructors use repo_dir"
        },
        {
          "id": "libvcs-0-1-1-2016-06-20",
          "level": 2,
          "text": "libvcs 0.1.1 (2016-06-20)"
        },
        {
          "id": "id150",
          "level": 3,
          "text": "Development"
        },
        {
          "id": "yaml-and-cli-helper-dependencies-are-dropped",
          "level": 4,
          "text": "YAML and CLI helper dependencies are dropped"
        },
        {
          "id": "libvcs-0-1-0-2016-06-20",
          "level": 2,
          "text": "libvcs 0.1.0 (2016-06-20)"
        },
        {
          "id": "id151",
          "level": 3,
          "text": "What’s new"
        },
        {
          "id": "libvcs-becomes-a-standalone-package",
          "level": 4,
          "text": "libvcs becomes a standalone package"
        }
      ]
    },
    {
      "title": "libvcs",
      "description": "Typed Python utilities for Git, SVN, and Mercurial. Parse URLs, execute commands, and synchronize repositories – all with a consistent, type-friendly API.",
      "section": "",
      "url": "/",
      "markdownUrl": "/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "libvcs"
        },
        {
          "id": "install",
          "level": 2,
          "text": "Install"
        },
        {
          "id": "at-a-glance",
          "level": 2,
          "text": "At a glance"
        },
        {
          "id": "testing",
          "level": 2,
          "text": "Testing"
        }
      ]
    },
    {
      "title": "Dataclass helpers - libvcs._internal.dataclasses",
      "description": "dataclasses utilities.",
      "section": "Documentation",
      "url": "/internals/dataclasses/",
      "markdownUrl": "/internals/dataclasses.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Dataclass helpers - libvcs._internal.dataclasses"
        },
        {
          "id": "libvcs._internal.dataclasses.SkipDefaultFieldsReprMixin",
          "level": 2,
          "text": "SkipDefaultFieldsReprMixin"
        },
        {
          "id": "libvcs._internal.dataclasses.SkipDefaultFieldsReprMixin.__dict__",
          "level": 3,
          "text": "__dict__"
        },
        {
          "id": "libvcs._internal.dataclasses.SkipDefaultFieldsReprMixin.__firstlineno__",
          "level": 3,
          "text": "__firstlineno__"
        },
        {
          "id": "libvcs._internal.dataclasses.SkipDefaultFieldsReprMixin.__module__",
          "level": 3,
          "text": "__module__"
        },
        {
          "id": "libvcs._internal.dataclasses.SkipDefaultFieldsReprMixin.__repr__",
          "level": 3,
          "text": "__repr__()"
        },
        {
          "id": "libvcs._internal.dataclasses.SkipDefaultFieldsReprMixin.__static_attributes__",
          "level": 3,
          "text": "__static_attributes__"
        },
        {
          "id": "libvcs._internal.dataclasses.SkipDefaultFieldsReprMixin.__weakref__",
          "level": 3,
          "text": "__weakref__"
        }
      ]
    },
    {
      "title": "Exceptions - libvcs.exc",
      "description": "Exceptions for libvcs.",
      "section": "Documentation",
      "url": "/internals/exc/",
      "markdownUrl": "/internals/exc.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Exceptions - libvcs.exc"
        },
        {
          "id": "libvcs.exc.LibVCSException",
          "level": 2,
          "text": "LibVCSException"
        },
        {
          "id": "libvcs.exc.CommandError",
          "level": 2,
          "text": "CommandError"
        },
        {
          "id": "libvcs.exc.CommandError.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.exc.CommandError.message",
          "level": 3,
          "text": "message"
        },
        {
          "id": "libvcs.exc.CommandTimeoutError",
          "level": 2,
          "text": "CommandTimeoutError"
        },
        {
          "id": "libvcs.exc.CommandTimeoutError.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.exc.CommandTimeoutError.timeout",
          "level": 3,
          "text": "timeout"
        },
        {
          "id": "libvcs.exc.InvalidVCS",
          "level": 2,
          "text": "InvalidVCS"
        }
      ]
    },
    {
      "title": "Internals",
      "description": "Error hierarchy for VCS operations.",
      "section": "Documentation",
      "url": "/internals/",
      "markdownUrl": "/internals/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Internals"
        }
      ]
    },
    {
      "title": "List querying - libvcs._internal.query_list",
      "description": "QueryList is the backbone of the Manager/Cmd pattern. Every ls() method in libvcs returns a QueryList, enabling chainable filtering on the results.",
      "section": "Documentation",
      "url": "/internals/query_list/",
      "markdownUrl": "/internals/query_list.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "List querying - libvcs._internal.query_list"
        },
        {
          "id": "how-it-s-used",
          "level": 2,
          "text": "How It’s Used"
        },
        {
          "id": "filtering",
          "level": 2,
          "text": "Filtering"
        },
        {
          "id": "available-lookups",
          "level": 3,
          "text": "Available Lookups"
        },
        {
          "id": "chaining",
          "level": 3,
          "text": "Chaining"
        },
        {
          "id": "module-libvcs._internal.query_list",
          "level": 2,
          "text": "API Reference"
        },
        {
          "id": "libvcs._internal.query_list.MultipleObjectsReturned",
          "level": 3,
          "text": "MultipleObjectsReturned"
        },
        {
          "id": "libvcs._internal.query_list.ObjectDoesNotExist",
          "level": 3,
          "text": "ObjectDoesNotExist"
        },
        {
          "id": "libvcs._internal.query_list.keygetter",
          "level": 3,
          "text": "keygetter()"
        },
        {
          "id": "libvcs._internal.query_list.parse_lookup",
          "level": 3,
          "text": "parse_lookup()"
        },
        {
          "id": "libvcs._internal.query_list.LookupProtocol",
          "level": 3,
          "text": "LookupProtocol"
        },
        {
          "id": "libvcs._internal.query_list.LookupProtocol.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs._internal.query_list.LookupProtocol._abc_impl",
          "level": 4,
          "text": "_abc_impl"
        },
        {
          "id": "libvcs._internal.query_list.LookupProtocol._is_protocol",
          "level": 4,
          "text": "_is_protocol"
        },
        {
          "id": "libvcs._internal.query_list.lookup_exact",
          "level": 3,
          "text": "lookup_exact()"
        },
        {
          "id": "libvcs._internal.query_list.lookup_iexact",
          "level": 3,
          "text": "lookup_iexact()"
        },
        {
          "id": "libvcs._internal.query_list.lookup_contains",
          "level": 3,
          "text": "lookup_contains()"
        },
        {
          "id": "libvcs._internal.query_list.lookup_icontains",
          "level": 3,
          "text": "lookup_icontains()"
        },
        {
          "id": "libvcs._internal.query_list.lookup_startswith",
          "level": 3,
          "text": "lookup_startswith()"
        },
        {
          "id": "libvcs._internal.query_list.lookup_istartswith",
          "level": 3,
          "text": "lookup_istartswith()"
        },
        {
          "id": "libvcs._internal.query_list.lookup_endswith",
          "level": 3,
          "text": "lookup_endswith()"
        },
        {
          "id": "libvcs._internal.query_list.lookup_iendswith",
          "level": 3,
          "text": "lookup_iendswith()"
        },
        {
          "id": "libvcs._internal.query_list.lookup_in",
          "level": 3,
          "text": "lookup_in()"
        },
        {
          "id": "libvcs._internal.query_list.lookup_nin",
          "level": 3,
          "text": "lookup_nin()"
        },
        {
          "id": "libvcs._internal.query_list.lookup_regex",
          "level": 3,
          "text": "lookup_regex()"
        },
        {
          "id": "libvcs._internal.query_list.lookup_iregex",
          "level": 3,
          "text": "lookup_iregex()"
        },
        {
          "id": "libvcs._internal.query_list.PKRequiredException",
          "level": 3,
          "text": "PKRequiredException"
        },
        {
          "id": "libvcs._internal.query_list.PKRequiredException.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs._internal.query_list.OpNotFound",
          "level": 3,
          "text": "OpNotFound"
        },
        {
          "id": "libvcs._internal.query_list.OpNotFound.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs._internal.query_list.QueryList",
          "level": 3,
          "text": "QueryList"
        },
        {
          "id": "libvcs._internal.query_list.QueryList.data",
          "level": 4,
          "text": "data"
        },
        {
          "id": "libvcs._internal.query_list.QueryList.pk_key",
          "level": 4,
          "text": "pk_key"
        },
        {
          "id": "libvcs._internal.query_list.QueryList.__init__",
          "level": 4,
          "text": "__init__()"
        },
        {
          "id": "libvcs._internal.query_list.QueryList.items",
          "level": 4,
          "text": "items()"
        },
        {
          "id": "libvcs._internal.query_list.QueryList.filter",
          "level": 4,
          "text": "filter()"
        },
        {
          "id": "libvcs._internal.query_list.QueryList.get",
          "level": 4,
          "text": "get()"
        }
      ]
    },
    {
      "title": "Command helpers - libvcs._internal.run",
      "description": "Misc. legacy helpers subprocess and finding VCS binaries.",
      "section": "Documentation",
      "url": "/internals/run/",
      "markdownUrl": "/internals/run.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Command helpers - libvcs._internal.run"
        },
        {
          "id": "libvcs._internal.run.console_to_str",
          "level": 2,
          "text": "console_to_str()"
        },
        {
          "id": "libvcs._internal.run.CmdLoggingAdapter",
          "level": 2,
          "text": "CmdLoggingAdapter"
        },
        {
          "id": "libvcs._internal.run.CmdLoggingAdapter.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs._internal.run.CmdLoggingAdapter.bin_name",
          "level": 3,
          "text": "bin_name"
        },
        {
          "id": "libvcs._internal.run.CmdLoggingAdapter.keyword",
          "level": 3,
          "text": "keyword"
        },
        {
          "id": "libvcs._internal.run.CmdLoggingAdapter.process",
          "level": 3,
          "text": "process()"
        },
        {
          "id": "libvcs._internal.run.ProgressCallbackProtocol",
          "level": 2,
          "text": "ProgressCallbackProtocol"
        },
        {
          "id": "libvcs._internal.run.ProgressCallbackProtocol.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs._internal.run.ProgressCallbackProtocol._abc_impl",
          "level": 3,
          "text": "_abc_impl"
        },
        {
          "id": "libvcs._internal.run.ProgressCallbackProtocol._is_protocol",
          "level": 3,
          "text": "_is_protocol"
        },
        {
          "id": "libvcs._internal.run._normalize_command_args",
          "level": 2,
          "text": "_normalize_command_args()"
        },
        {
          "id": "libvcs._internal.run._stringify_command",
          "level": 2,
          "text": "_stringify_command()"
        },
        {
          "id": "libvcs._internal.run.run",
          "level": 2,
          "text": "run()"
        },
        {
          "id": "libvcs._internal.run._TIMEOUT_KILL_GRACE_SECONDS",
          "level": 2,
          "text": "_TIMEOUT_KILL_GRACE_SECONDS"
        },
        {
          "id": "libvcs._internal.run._TIMEOUT_POLL_INTERVAL_SECONDS",
          "level": 2,
          "text": "_TIMEOUT_POLL_INTERVAL_SECONDS"
        },
        {
          "id": "libvcs._internal.run._wait_with_deadline",
          "level": 2,
          "text": "_wait_with_deadline()"
        },
        {
          "id": "libvcs._internal.run._join_buffer",
          "level": 2,
          "text": "_join_buffer()"
        },
        {
          "id": "libvcs._internal.run._terminate_process",
          "level": 2,
          "text": "_terminate_process()"
        },
        {
          "id": "libvcs._internal.run._format_cmd_for_log",
          "level": 2,
          "text": "_format_cmd_for_log()"
        },
        {
          "id": "libvcs._internal.run._drain_stream",
          "level": 2,
          "text": "_drain_stream()"
        }
      ]
    },
    {
      "title": "Shortcuts - libvcs._internal.shortcuts",
      "description": "Shortcuts for creating repos.",
      "section": "Documentation",
      "url": "/internals/shortcuts/",
      "markdownUrl": "/internals/shortcuts.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Shortcuts - libvcs._internal.shortcuts"
        },
        {
          "id": "libvcs._internal.shortcuts.VCSNoMatchFoundForUrl",
          "level": 2,
          "text": "VCSNoMatchFoundForUrl"
        },
        {
          "id": "libvcs._internal.shortcuts.VCSNoMatchFoundForUrl.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs._internal.shortcuts.VCSMultipleMatchFoundForUrl",
          "level": 2,
          "text": "VCSMultipleMatchFoundForUrl"
        },
        {
          "id": "libvcs._internal.shortcuts.VCSMultipleMatchFoundForUrl.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs._internal.shortcuts.VCSNotSupported",
          "level": 2,
          "text": "VCSNotSupported"
        },
        {
          "id": "libvcs._internal.shortcuts.VCSNotSupported.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs._internal.shortcuts.create_project",
          "level": 2,
          "text": "create_project()"
        }
      ]
    },
    {
      "title": "SubprocessCommand - libvcs._internal.subprocess",
      "description": "Invocable subprocess wrapper.",
      "section": "Documentation",
      "url": "/internals/subprocess/",
      "markdownUrl": "/internals/subprocess.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "SubprocessCommand - libvcs._internal.subprocess"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCheckOutputError",
          "level": 2,
          "text": "SubprocessCheckOutputError"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCheckOutputError.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs._internal.subprocess._CMD",
          "level": 2,
          "text": "_CMD"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand",
          "level": 2,
          "text": "SubprocessCommand"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.args",
          "level": 3,
          "text": "args"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.bufsize",
          "level": 3,
          "text": "bufsize"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.executable",
          "level": 3,
          "text": "executable"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.stdin",
          "level": 3,
          "text": "stdin"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.stdout",
          "level": 3,
          "text": "stdout"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.stderr",
          "level": 3,
          "text": "stderr"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.preexec_fn",
          "level": 3,
          "text": "preexec_fn"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.close_fds",
          "level": 3,
          "text": "close_fds"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.shell",
          "level": 3,
          "text": "shell"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.cwd",
          "level": 3,
          "text": "cwd"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.env",
          "level": 3,
          "text": "env"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.creationflags",
          "level": 3,
          "text": "creationflags"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.startupinfo",
          "level": 3,
          "text": "startupinfo"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.restore_signals",
          "level": 3,
          "text": "restore_signals"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.start_new_session",
          "level": 3,
          "text": "start_new_session"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.pass_fds",
          "level": 3,
          "text": "pass_fds"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.umask",
          "level": 3,
          "text": "umask"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.pipesize",
          "level": 3,
          "text": "pipesize"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.user",
          "level": 3,
          "text": "user"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.group",
          "level": 3,
          "text": "group"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.extra_groups",
          "level": 3,
          "text": "extra_groups"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.universal_newlines",
          "level": 3,
          "text": "universal_newlines"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.text",
          "level": 3,
          "text": "text"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.encoding",
          "level": 3,
          "text": "encoding"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.errors",
          "level": 3,
          "text": "errors"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.Popen",
          "level": 3,
          "text": "Popen()"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.check_call",
          "level": 3,
          "text": "check_call()"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.check_output",
          "level": 3,
          "text": "check_output()"
        },
        {
          "id": "libvcs._internal.subprocess.SubprocessCommand.run",
          "level": 3,
          "text": "run()"
        }
      ]
    },
    {
      "title": "Typing utilities - libvcs._internal.types",
      "description": "Internal type annotations.",
      "section": "Documentation",
      "url": "/internals/types/",
      "markdownUrl": "/internals/types.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Typing utilities - libvcs._internal.types"
        },
        {
          "id": "libvcs._internal.types.StrPath",
          "level": 2,
          "text": "StrPath"
        },
        {
          "id": "libvcs._internal.types.StrOrBytesPath",
          "level": 2,
          "text": "StrOrBytesPath"
        },
        {
          "id": "libvcs._internal.types.VCSLiteral",
          "level": 2,
          "text": "VCSLiteral"
        }
      ]
    },
    {
      "title": "Migration notes",
      "description": "Migration and deprecation notes for libvcs are here, see history as well.",
      "section": "Documentation",
      "url": "/migration/",
      "markdownUrl": "/migration.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Migration notes"
        },
        {
          "id": "next-release",
          "level": 2,
          "text": "Next release"
        },
        {
          "id": "pytest-fixtures-gitconfig-hgconfig-renamed-to-vcs-gitconfig-vcs-hgconfig-528",
          "level": 3,
          "text": "pytest fixtures: gitconfig / hgconfig renamed to vcs_gitconfig / vcs_hgconfig (#528)"
        },
        {
          "id": "pytest-fixtures-git-local-clone-renamed-to-example-git-repo-468",
          "level": 3,
          "text": "pytest fixtures: git_local_clone renamed to example_git_repo (#468)"
        },
        {
          "id": "commands-listing-method-renamed-466",
          "level": 3,
          "text": "Commands: Listing method renamed (#466)"
        },
        {
          "id": "libvcs-0-30-0-2024-06-18",
          "level": 2,
          "text": "libvcs 0.30.0 (2024-06-18)"
        },
        {
          "id": "urls-variable-renamings-and-moves-463",
          "level": 3,
          "text": "URLs: Variable renamings and moves (#463)"
        },
        {
          "id": "libvcs-0-20-0-2022-10-31",
          "level": 2,
          "text": "libvcs 0.20.0 (2022-10-31)"
        },
        {
          "id": "urls-mapping-now-class-attributes-433",
          "level": 3,
          "text": "URLs: Mapping now class attributes (#433)"
        }
      ]
    },
    {
      "title": "Code Style",
      "description": "libvcs uses ruff for formatting and linting in a single tool. The full rule set is declared in pyproject.toml under [tool.ruff].",
      "section": "Documentation",
      "url": "/project/code-style/",
      "markdownUrl": "/project/code-style.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Code Style"
        },
        {
          "id": "formatting-and-linting",
          "level": 2,
          "text": "Formatting and linting"
        },
        {
          "id": "type-checking",
          "level": 2,
          "text": "Type checking"
        },
        {
          "id": "docstrings",
          "level": 2,
          "text": "Docstrings"
        },
        {
          "id": "imports",
          "level": 2,
          "text": "Imports"
        }
      ]
    },
    {
      "title": "Contributing",
      "description": "As an open source project, libvcs accepts contributions through GitHub.",
      "section": "Documentation",
      "url": "/project/contributing/",
      "markdownUrl": "/project/contributing.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Contributing"
        }
      ]
    },
    {
      "title": "Project",
      "description": "Information for contributors and maintainers.",
      "section": "Documentation",
      "url": "/project/",
      "markdownUrl": "/project/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Project"
        }
      ]
    },
    {
      "title": "Releasing",
      "description": "libvcs is pre-1.0. Any minor bump (e.g. 0.39 to 0.40) may contain breaking changes. Patch bumps (0.39.0 to 0.39.1) are reserved for bug-fixes and documentation.",
      "section": "Documentation",
      "url": "/project/releasing/",
      "markdownUrl": "/project/releasing.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Releasing"
        },
        {
          "id": "version-policy",
          "level": 2,
          "text": "Version policy"
        },
        {
          "id": "checklist",
          "level": 2,
          "text": "Checklist"
        },
        {
          "id": "manual-publish-fallback",
          "level": 2,
          "text": "Manual publish (fallback)"
        }
      ]
    },
    {
      "title": "Workflow",
      "description": "uv is a required package to develop.",
      "section": "Documentation",
      "url": "/project/workflow/",
      "markdownUrl": "/project/workflow.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Workflow"
        },
        {
          "id": "development-environment",
          "level": 2,
          "text": "Development environment"
        },
        {
          "id": "tests",
          "level": 2,
          "text": "Tests"
        },
        {
          "id": "documentation",
          "level": 2,
          "text": "Documentation"
        },
        {
          "id": "manual-documentation-the-hard-way",
          "level": 3,
          "text": "Manual documentation (the hard way)"
        },
        {
          "id": "formatting-linting",
          "level": 2,
          "text": "Formatting / linting"
        },
        {
          "id": "ruff",
          "level": 3,
          "text": "ruff"
        },
        {
          "id": "ruff-format",
          "level": 4,
          "text": "ruff format"
        },
        {
          "id": "mypy",
          "level": 3,
          "text": "mypy"
        },
        {
          "id": "releasing",
          "level": 2,
          "text": "Releasing"
        },
        {
          "id": "releasing-manual",
          "level": 3,
          "text": "Releasing (manual)"
        }
      ]
    },
    {
      "title": "Quickstart",
      "description": "For latest official version:",
      "section": "Documentation",
      "url": "/quickstart/",
      "markdownUrl": "/quickstart.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Quickstart"
        },
        {
          "id": "installation",
          "level": 2,
          "text": "Installation"
        },
        {
          "id": "developmental-releases",
          "level": 3,
          "text": "Developmental releases"
        },
        {
          "id": "basic-usage",
          "level": 2,
          "text": "Basic Usage"
        },
        {
          "id": "commands",
          "level": 3,
          "text": "Commands"
        },
        {
          "id": "subcommand-managers",
          "level": 3,
          "text": "Subcommand Managers"
        }
      ]
    },
    {
      "title": "libvcs.sync.base",
      "description": "Base objects / classes for projects.",
      "section": "Documentation",
      "url": "/sync/base/",
      "markdownUrl": "/sync/base.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "libvcs.sync.base"
        },
        {
          "id": "libvcs.sync.base.SyncError",
          "level": 2,
          "text": "SyncError"
        },
        {
          "id": "libvcs.sync.base.SyncError.step",
          "level": 3,
          "text": "step"
        },
        {
          "id": "libvcs.sync.base.SyncError.message",
          "level": 3,
          "text": "message"
        },
        {
          "id": "libvcs.sync.base.SyncError.exception",
          "level": 3,
          "text": "exception"
        },
        {
          "id": "libvcs.sync.base.SyncError.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.sync.base.SyncResult",
          "level": 2,
          "text": "SyncResult"
        },
        {
          "id": "libvcs.sync.base.SyncResult.ok",
          "level": 3,
          "text": "ok"
        },
        {
          "id": "libvcs.sync.base.SyncResult.errors",
          "level": 3,
          "text": "errors"
        },
        {
          "id": "libvcs.sync.base.SyncResult.add_error",
          "level": 3,
          "text": "add_error()"
        },
        {
          "id": "libvcs.sync.base.SyncResult.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.sync.base.VCSLocation",
          "level": 2,
          "text": "VCSLocation"
        },
        {
          "id": "libvcs.sync.base.VCSLocation.url",
          "level": 3,
          "text": "url"
        },
        {
          "id": "libvcs.sync.base.VCSLocation.rev",
          "level": 3,
          "text": "rev"
        },
        {
          "id": "libvcs.sync.base.VCSLocation.__new__",
          "level": 3,
          "text": "__new__()"
        },
        {
          "id": "libvcs.sync.base.VCSLocation._asdict",
          "level": 3,
          "text": "_asdict()"
        },
        {
          "id": "libvcs.sync.base.VCSLocation._field_defaults",
          "level": 3,
          "text": "_field_defaults"
        },
        {
          "id": "libvcs.sync.base.VCSLocation._fields",
          "level": 3,
          "text": "_fields"
        },
        {
          "id": "libvcs.sync.base.VCSLocation._make",
          "level": 3,
          "text": "_make()"
        },
        {
          "id": "libvcs.sync.base.VCSLocation._replace",
          "level": 3,
          "text": "_replace()"
        },
        {
          "id": "libvcs.sync.base.convert_pip_url",
          "level": 2,
          "text": "convert_pip_url()"
        },
        {
          "id": "libvcs.sync.base.BaseSync",
          "level": 2,
          "text": "BaseSync"
        },
        {
          "id": "libvcs.sync.base.BaseSync.log_in_real_time",
          "level": 3,
          "text": "log_in_real_time"
        },
        {
          "id": "libvcs.sync.base.BaseSync.bin_name",
          "level": 3,
          "text": "bin_name"
        },
        {
          "id": "libvcs.sync.base.BaseSync.schemes",
          "level": 3,
          "text": "schemes"
        },
        {
          "id": "libvcs.sync.base.BaseSync.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.sync.base.BaseSync.progress_callback",
          "level": 3,
          "text": "progress_callback"
        },
        {
          "id": "libvcs.sync.base.BaseSync.path",
          "level": 3,
          "text": "path"
        },
        {
          "id": "libvcs.sync.base.BaseSync.log",
          "level": 3,
          "text": "log"
        },
        {
          "id": "libvcs.sync.base.BaseSync.repo_name",
          "level": 3,
          "text": "repo_name"
        },
        {
          "id": "libvcs.sync.base.BaseSync.from_pip_url",
          "level": 3,
          "text": "from_pip_url()"
        },
        {
          "id": "libvcs.sync.base.BaseSync.run",
          "level": 3,
          "text": "run()"
        },
        {
          "id": "libvcs.sync.base.BaseSync.ensure_dir",
          "level": 3,
          "text": "ensure_dir()"
        },
        {
          "id": "libvcs.sync.base.BaseSync.update_repo",
          "level": 3,
          "text": "update_repo()"
        },
        {
          "id": "libvcs.sync.base.BaseSync.obtain",
          "level": 3,
          "text": "obtain()"
        }
      ]
    },
    {
      "title": "libvcs.sync.git",
      "description": "For git(1).",
      "section": "Documentation",
      "url": "/sync/git/",
      "markdownUrl": "/sync/git.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "libvcs.sync.git"
        },
        {
          "id": "libvcs.sync.git.GitStatusParsingException",
          "level": 2,
          "text": "GitStatusParsingException"
        },
        {
          "id": "libvcs.sync.git.GitStatusParsingException.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.sync.git.GitRemoteOriginMissing",
          "level": 2,
          "text": "GitRemoteOriginMissing"
        },
        {
          "id": "libvcs.sync.git.GitRemoteOriginMissing.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.sync.git.GitRemoteSetError",
          "level": 2,
          "text": "GitRemoteSetError"
        },
        {
          "id": "libvcs.sync.git.GitRemoteSetError.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.sync.git.GitNoBranchFound",
          "level": 2,
          "text": "GitNoBranchFound"
        },
        {
          "id": "libvcs.sync.git.GitNoBranchFound.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.sync.git.GitRemoteRefNotFound",
          "level": 2,
          "text": "GitRemoteRefNotFound"
        },
        {
          "id": "libvcs.sync.git.GitRemoteRefNotFound.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.sync.git.GitRemoteRefNotFound._message",
          "level": 3,
          "text": "_message"
        },
        {
          "id": "libvcs.sync.git.GitRemote",
          "level": 2,
          "text": "GitRemote"
        },
        {
          "id": "libvcs.sync.git.GitRemote.name",
          "level": 3,
          "text": "name"
        },
        {
          "id": "libvcs.sync.git.GitRemote.fetch_url",
          "level": 3,
          "text": "fetch_url"
        },
        {
          "id": "libvcs.sync.git.GitRemote.push_url",
          "level": 3,
          "text": "push_url"
        },
        {
          "id": "libvcs.sync.git.GitRemote.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.sync.git.GitStatus",
          "level": 2,
          "text": "GitStatus"
        },
        {
          "id": "libvcs.sync.git.GitStatus.branch_oid",
          "level": 3,
          "text": "branch_oid"
        },
        {
          "id": "libvcs.sync.git.GitStatus.branch_head",
          "level": 3,
          "text": "branch_head"
        },
        {
          "id": "libvcs.sync.git.GitStatus.branch_upstream",
          "level": 3,
          "text": "branch_upstream"
        },
        {
          "id": "libvcs.sync.git.GitStatus.branch_ab",
          "level": 3,
          "text": "branch_ab"
        },
        {
          "id": "libvcs.sync.git.GitStatus.branch_ahead",
          "level": 3,
          "text": "branch_ahead"
        },
        {
          "id": "libvcs.sync.git.GitStatus.branch_behind",
          "level": 3,
          "text": "branch_behind"
        },
        {
          "id": "libvcs.sync.git.GitStatus.from_stdout",
          "level": 3,
          "text": "from_stdout()"
        },
        {
          "id": "libvcs.sync.git.GitStatus.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.sync.git.convert_pip_url",
          "level": 2,
          "text": "convert_pip_url()"
        },
        {
          "id": "libvcs.sync.git.GitSync",
          "level": 2,
          "text": "GitSync"
        },
        {
          "id": "libvcs.sync.git.GitSync.bin_name",
          "level": 3,
          "text": "bin_name"
        },
        {
          "id": "libvcs.sync.git.GitSync.schemes",
          "level": 3,
          "text": "schemes"
        },
        {
          "id": "libvcs.sync.git.GitSync.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.sync.git.GitSync._remotes",
          "level": 3,
          "text": "_remotes"
        },
        {
          "id": "libvcs.sync.git.GitSync.cmd",
          "level": 3,
          "text": "cmd"
        },
        {
          "id": "libvcs.sync.git.GitSync.from_pip_url",
          "level": 3,
          "text": "from_pip_url()"
        },
        {
          "id": "libvcs.sync.git.GitSync.get_revision",
          "level": 3,
          "text": "get_revision()"
        },
        {
          "id": "libvcs.sync.git.GitSync.set_remotes",
          "level": 3,
          "text": "set_remotes()"
        },
        {
          "id": "libvcs.sync.git.GitSync.obtain",
          "level": 3,
          "text": "obtain()"
        },
        {
          "id": "libvcs.sync.git.GitSync.update_repo",
          "level": 3,
          "text": "update_repo()"
        },
        {
          "id": "libvcs.sync.git.GitSync.remotes",
          "level": 3,
          "text": "remotes()"
        },
        {
          "id": "libvcs.sync.git.GitSync.remote",
          "level": 3,
          "text": "remote()"
        },
        {
          "id": "libvcs.sync.git.GitSync.set_remote",
          "level": 3,
          "text": "set_remote()"
        },
        {
          "id": "libvcs.sync.git.GitSync.chomp_protocol",
          "level": 3,
          "text": "chomp_protocol()"
        },
        {
          "id": "libvcs.sync.git.GitSync.get_git_version",
          "level": 3,
          "text": "get_git_version()"
        },
        {
          "id": "libvcs.sync.git.GitSync.status",
          "level": 3,
          "text": "status()"
        },
        {
          "id": "libvcs.sync.git.GitSync.get_current_remote_name",
          "level": 3,
          "text": "get_current_remote_name()"
        }
      ]
    },
    {
      "title": "libvcs.sync.hg",
      "description": "For mercurial, aka hg(1).",
      "section": "Documentation",
      "url": "/sync/hg/",
      "markdownUrl": "/sync/hg.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "libvcs.sync.hg"
        },
        {
          "id": "libvcs.sync.hg.HgSync",
          "level": 2,
          "text": "HgSync"
        },
        {
          "id": "libvcs.sync.hg.HgSync.bin_name",
          "level": 3,
          "text": "bin_name"
        },
        {
          "id": "libvcs.sync.hg.HgSync.schemes",
          "level": 3,
          "text": "schemes"
        },
        {
          "id": "libvcs.sync.hg.HgSync.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.sync.hg.HgSync.cmd",
          "level": 3,
          "text": "cmd"
        },
        {
          "id": "libvcs.sync.hg.HgSync.obtain",
          "level": 3,
          "text": "obtain()"
        },
        {
          "id": "libvcs.sync.hg.HgSync.get_revision",
          "level": 3,
          "text": "get_revision()"
        },
        {
          "id": "libvcs.sync.hg.HgSync.update_repo",
          "level": 3,
          "text": "update_repo()"
        }
      ]
    },
    {
      "title": "Sync - libvcs.sync",
      "description": "Compare to: fabtools.require.git, salt.states.git, ansible.builtin.git",
      "section": "Documentation",
      "url": "/sync/",
      "markdownUrl": "/sync/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Sync - libvcs.sync"
        },
        {
          "id": "modules",
          "level": 2,
          "text": "Modules"
        },
        {
          "id": "module-libvcs.sync.constants",
          "level": 2,
          "text": "Constants"
        },
        {
          "id": "libvcs.sync.constants.DEFAULT_VCS_LITERAL",
          "level": 3,
          "text": "DEFAULT_VCS_LITERAL"
        },
        {
          "id": "libvcs.sync.constants.DEFAULT_VCS_CLASS_UNION",
          "level": 3,
          "text": "DEFAULT_VCS_CLASS_UNION"
        },
        {
          "id": "libvcs.sync.constants.DEFAULT_VCS_CLASS_MAP",
          "level": 3,
          "text": "DEFAULT_VCS_CLASS_MAP"
        }
      ]
    },
    {
      "title": "libvcs.sync.svn",
      "description": "For subversion, aka svn(1)",
      "section": "Documentation",
      "url": "/sync/svn/",
      "markdownUrl": "/sync/svn.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "libvcs.sync.svn"
        },
        {
          "id": "libvcs.sync.svn.SvnUrlRevFormattingError",
          "level": 2,
          "text": "SvnUrlRevFormattingError"
        },
        {
          "id": "libvcs.sync.svn.SvnUrlRevFormattingError.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.sync.svn.SvnSync",
          "level": 2,
          "text": "SvnSync"
        },
        {
          "id": "libvcs.sync.svn.SvnSync.bin_name",
          "level": 3,
          "text": "bin_name"
        },
        {
          "id": "libvcs.sync.svn.SvnSync.schemes",
          "level": 3,
          "text": "schemes"
        },
        {
          "id": "libvcs.sync.svn.SvnSync.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.sync.svn.SvnSync.cmd",
          "level": 3,
          "text": "cmd"
        },
        {
          "id": "libvcs.sync.svn.SvnSync._user_pw_args",
          "level": 3,
          "text": "_user_pw_args()"
        },
        {
          "id": "libvcs.sync.svn.SvnSync.obtain",
          "level": 3,
          "text": "obtain()"
        },
        {
          "id": "libvcs.sync.svn.SvnSync.get_revision_file",
          "level": 3,
          "text": "get_revision_file()"
        },
        {
          "id": "libvcs.sync.svn.SvnSync.get_revision",
          "level": 3,
          "text": "get_revision()"
        },
        {
          "id": "libvcs.sync.svn.SvnSync.update_repo",
          "level": 3,
          "text": "update_repo()"
        },
        {
          "id": "libvcs.sync.svn.SvnSync._get_svn_url_rev",
          "level": 3,
          "text": "_get_svn_url_rev()"
        }
      ]
    },
    {
      "title": "QueryList Filtering",
      "description": "libvcs uses QueryList to enable Django-style filtering on git entities. Every ls() method returns a QueryList, letting you filter branches, tags, remotes, and more with a fluent, chainable API.",
      "section": "Documentation",
      "url": "/topics/filtering/",
      "markdownUrl": "/topics/filtering.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "QueryList Filtering"
        },
        {
          "id": "basic-filtering",
          "level": 2,
          "text": "Basic Filtering"
        },
        {
          "id": "exact-match",
          "level": 3,
          "text": "Exact Match"
        },
        {
          "id": "contains-and-startswith",
          "level": 3,
          "text": "Contains and Startswith"
        },
        {
          "id": "available-lookups",
          "level": 2,
          "text": "Available Lookups"
        },
        {
          "id": "getting-a-single-item",
          "level": 2,
          "text": "Getting a Single Item"
        },
        {
          "id": "chaining-filters",
          "level": 2,
          "text": "Chaining Filters"
        },
        {
          "id": "working-with-tags",
          "level": 2,
          "text": "Working with Tags"
        },
        {
          "id": "regex-filtering",
          "level": 2,
          "text": "Regex Filtering"
        },
        {
          "id": "api-reference",
          "level": 2,
          "text": "API Reference"
        }
      ]
    },
    {
      "title": "Topics",
      "description": "Explore libvcs’s core functionalities and design patterns at a high level, with detailed explanations and runnable examples.",
      "section": "Documentation",
      "url": "/topics/",
      "markdownUrl": "/topics/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Topics"
        }
      ]
    },
    {
      "title": "Traversing Git Repos",
      "description": "libvcs provides Managers and Commands for intuitively traversing and navigating entities in a git repository—branches, tags, remotes, stashes, and more—with ORM-like convenience via QueryList.",
      "section": "Documentation",
      "url": "/topics/traversing_git/",
      "markdownUrl": "/topics/traversing_git.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Traversing Git Repos"
        },
        {
          "id": "overview",
          "level": 2,
          "text": "Overview"
        },
        {
          "id": "basic-usage",
          "level": 2,
          "text": "Basic Usage"
        },
        {
          "id": "listing-items",
          "level": 3,
          "text": "Listing Items"
        },
        {
          "id": "getting-a-single-item",
          "level": 3,
          "text": "Getting a Single Item"
        },
        {
          "id": "creating-items",
          "level": 3,
          "text": "Creating Items"
        },
        {
          "id": "per-entity-operations",
          "level": 3,
          "text": "Per-Entity Operations"
        },
        {
          "id": "comparison-to-raw-commands",
          "level": 2,
          "text": "Comparison to Raw Commands"
        },
        {
          "id": "before-parsing-strings",
          "level": 3,
          "text": "Before: Parsing Strings"
        },
        {
          "id": "after-typed-objects",
          "level": 3,
          "text": "After: Typed Objects"
        },
        {
          "id": "working-with-remotes",
          "level": 2,
          "text": "Working with Remotes"
        },
        {
          "id": "branch-operations",
          "level": 2,
          "text": "Branch Operations"
        },
        {
          "id": "stash-workflow",
          "level": 2,
          "text": "Stash Workflow"
        },
        {
          "id": "worktree-management",
          "level": 2,
          "text": "Worktree Management"
        },
        {
          "id": "notes",
          "level": 2,
          "text": "Notes"
        },
        {
          "id": "filtering-with-ls-parameters",
          "level": 2,
          "text": "Filtering with ls() Parameters"
        },
        {
          "id": "error-handling",
          "level": 2,
          "text": "Error Handling"
        },
        {
          "id": "when-to-use",
          "level": 2,
          "text": "When to Use"
        },
        {
          "id": "available-managers",
          "level": 2,
          "text": "Available Managers"
        }
      ]
    },
    {
      "title": "URL Parsing",
      "description": "libvcs provides typed URL parsing for git, Mercurial, and Subversion repositories. Think of it as urllib.parse for VCS URLs—detecting URL types, extracting components, and converting between formats.",
      "section": "Documentation",
      "url": "/topics/url_parsing/",
      "markdownUrl": "/topics/url_parsing.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "URL Parsing"
        },
        {
          "id": "detecting-url-types",
          "level": 2,
          "text": "Detecting URL Types"
        },
        {
          "id": "parsing-urls",
          "level": 2,
          "text": "Parsing URLs"
        },
        {
          "id": "https-urls",
          "level": 3,
          "text": "HTTPS URLs"
        },
        {
          "id": "scp-style-urls",
          "level": 3,
          "text": "SCP-style URLs"
        },
        {
          "id": "converting-url-formats",
          "level": 2,
          "text": "Converting URL Formats"
        },
        {
          "id": "pip-style-urls",
          "level": 2,
          "text": "Pip-style URLs"
        },
        {
          "id": "other-vcs-types",
          "level": 2,
          "text": "Other VCS Types"
        },
        {
          "id": "mercurial",
          "level": 3,
          "text": "Mercurial"
        },
        {
          "id": "subversion",
          "level": 3,
          "text": "Subversion"
        },
        {
          "id": "url-registry",
          "level": 2,
          "text": "URL Registry"
        },
        {
          "id": "api-reference",
          "level": 2,
          "text": "API Reference"
        }
      ]
    },
    {
      "title": "Framework: Add and extend URL parsers - libvcs.url.base",
      "description": "Foundational tools to detect, parse, and validate VCS URLs.",
      "section": "Documentation",
      "url": "/url/base/",
      "markdownUrl": "/url/base.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Framework: Add and extend URL parsers - libvcs.url.base"
        },
        {
          "id": "libvcs.url.base.URLProtocol",
          "level": 2,
          "text": "URLProtocol"
        },
        {
          "id": "libvcs.url.base.URLProtocol.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.url.base.URLProtocol.to_url",
          "level": 3,
          "text": "to_url()"
        },
        {
          "id": "libvcs.url.base.URLProtocol.is_valid",
          "level": 3,
          "text": "is_valid()"
        },
        {
          "id": "libvcs.url.base.URLProtocol._abc_impl",
          "level": 3,
          "text": "_abc_impl"
        },
        {
          "id": "libvcs.url.base.URLProtocol._is_protocol",
          "level": 3,
          "text": "_is_protocol"
        },
        {
          "id": "libvcs.url.base.Rule",
          "level": 2,
          "text": "Rule"
        },
        {
          "id": "libvcs.url.base.Rule.label",
          "level": 3,
          "text": "label"
        },
        {
          "id": "libvcs.url.base.Rule.description",
          "level": 3,
          "text": "description"
        },
        {
          "id": "libvcs.url.base.Rule.pattern",
          "level": 3,
          "text": "pattern"
        },
        {
          "id": "libvcs.url.base.Rule.defaults",
          "level": 3,
          "text": "defaults"
        },
        {
          "id": "libvcs.url.base.Rule.is_explicit",
          "level": 3,
          "text": "is_explicit"
        },
        {
          "id": "libvcs.url.base.Rule.weight",
          "level": 3,
          "text": "weight"
        },
        {
          "id": "libvcs.url.base.Rule.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.url.base.RuleMap",
          "level": 2,
          "text": "RuleMap"
        },
        {
          "id": "libvcs.url.base.RuleMap.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.url.base.RuleMap._rule_map",
          "level": 3,
          "text": "_rule_map"
        },
        {
          "id": "libvcs.url.base.RuleMap.register",
          "level": 3,
          "text": "register()"
        },
        {
          "id": "libvcs.url.base.RuleMap.unregister",
          "level": 3,
          "text": "unregister()"
        },
        {
          "id": "libvcs.url.base.RuleMap.values",
          "level": 3,
          "text": "values()"
        }
      ]
    },
    {
      "title": "Constants - libvcs.url.constants",
      "description": "Constants shared across libvcs.url.",
      "section": "Documentation",
      "url": "/url/constants/",
      "markdownUrl": "/url/constants.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Constants - libvcs.url.constants"
        },
        {
          "id": "libvcs.url.constants.RE_USER",
          "level": 2,
          "text": "RE_USER"
        },
        {
          "id": "libvcs.url.constants.RE_SCP",
          "level": 2,
          "text": "RE_SCP"
        },
        {
          "id": "libvcs.url.constants.RE_PIP_REV",
          "level": 2,
          "text": "RE_PIP_REV"
        }
      ]
    },
    {
      "title": "Git URL Parser - libvcs.url.git",
      "description": "Detect, parse, and change git URLs using libvcs’s URL parser for git(1). It builds on top of the VCS-friendly URL parser framework.",
      "section": "Documentation",
      "url": "/url/git/",
      "markdownUrl": "/url/git.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Git URL Parser - libvcs.url.git"
        },
        {
          "id": "libvcs.url.git.DEFAULT_RULES",
          "level": 2,
          "text": "DEFAULT_RULES"
        },
        {
          "id": "libvcs.url.git.AWS_CODE_COMMIT_DEFAULT_RULES",
          "level": 2,
          "text": "AWS_CODE_COMMIT_DEFAULT_RULES"
        },
        {
          "id": "libvcs.url.git.PIP_DEFAULT_RULES",
          "level": 2,
          "text": "PIP_DEFAULT_RULES"
        },
        {
          "id": "libvcs.url.git.NPM_DEFAULT_RULES",
          "level": 2,
          "text": "NPM_DEFAULT_RULES"
        },
        {
          "id": "libvcs.url.git.GitBaseURL",
          "level": 2,
          "text": "GitBaseURL"
        },
        {
          "id": "libvcs.url.git.GitBaseURL.url",
          "level": 3,
          "text": "url"
        },
        {
          "id": "libvcs.url.git.GitBaseURL.scheme",
          "level": 3,
          "text": "scheme"
        },
        {
          "id": "libvcs.url.git.GitBaseURL.user",
          "level": 3,
          "text": "user"
        },
        {
          "id": "libvcs.url.git.GitBaseURL.hostname",
          "level": 3,
          "text": "hostname"
        },
        {
          "id": "libvcs.url.git.GitBaseURL.port",
          "level": 3,
          "text": "port"
        },
        {
          "id": "libvcs.url.git.GitBaseURL.path",
          "level": 3,
          "text": "path"
        },
        {
          "id": "libvcs.url.git.GitBaseURL.suffix",
          "level": 3,
          "text": "suffix"
        },
        {
          "id": "libvcs.url.git.GitBaseURL.rule",
          "level": 3,
          "text": "rule"
        },
        {
          "id": "libvcs.url.git.GitBaseURL.rule_map",
          "level": 3,
          "text": "rule_map"
        },
        {
          "id": "libvcs.url.git.GitBaseURL.is_valid",
          "level": 3,
          "text": "is_valid()"
        },
        {
          "id": "libvcs.url.git.GitBaseURL.to_url",
          "level": 3,
          "text": "to_url()"
        },
        {
          "id": "libvcs.url.git.GitBaseURL.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.url.git.GitBaseURL._abc_impl",
          "level": 3,
          "text": "_abc_impl"
        },
        {
          "id": "libvcs.url.git.GitBaseURL._is_protocol",
          "level": 3,
          "text": "_is_protocol"
        },
        {
          "id": "libvcs.url.git.GitAWSCodeCommitURL",
          "level": 2,
          "text": "GitAWSCodeCommitURL"
        },
        {
          "id": "libvcs.url.git.GitAWSCodeCommitURL.region",
          "level": 3,
          "text": "region"
        },
        {
          "id": "libvcs.url.git.GitAWSCodeCommitURL.rev",
          "level": 3,
          "text": "rev"
        },
        {
          "id": "libvcs.url.git.GitAWSCodeCommitURL.rule_map",
          "level": 3,
          "text": "rule_map"
        },
        {
          "id": "libvcs.url.git.GitAWSCodeCommitURL.to_url",
          "level": 3,
          "text": "to_url()"
        },
        {
          "id": "libvcs.url.git.GitAWSCodeCommitURL.is_valid",
          "level": 3,
          "text": "is_valid()"
        },
        {
          "id": "libvcs.url.git.GitAWSCodeCommitURL.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.url.git.GitAWSCodeCommitURL._abc_impl",
          "level": 3,
          "text": "_abc_impl"
        },
        {
          "id": "libvcs.url.git.GitAWSCodeCommitURL._is_protocol",
          "level": 3,
          "text": "_is_protocol"
        },
        {
          "id": "libvcs.url.git.GitPipURL",
          "level": 2,
          "text": "GitPipURL"
        },
        {
          "id": "libvcs.url.git.GitPipURL.rev",
          "level": 3,
          "text": "rev"
        },
        {
          "id": "libvcs.url.git.GitPipURL.rule_map",
          "level": 3,
          "text": "rule_map"
        },
        {
          "id": "libvcs.url.git.GitPipURL.to_url",
          "level": 3,
          "text": "to_url()"
        },
        {
          "id": "libvcs.url.git.GitPipURL.is_valid",
          "level": 3,
          "text": "is_valid()"
        },
        {
          "id": "libvcs.url.git.GitPipURL.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.url.git.GitPipURL._abc_impl",
          "level": 3,
          "text": "_abc_impl"
        },
        {
          "id": "libvcs.url.git.GitPipURL._is_protocol",
          "level": 3,
          "text": "_is_protocol"
        },
        {
          "id": "libvcs.url.git.GitURL",
          "level": 2,
          "text": "GitURL"
        },
        {
          "id": "libvcs.url.git.GitURL.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.url.git.GitURL._abc_impl",
          "level": 3,
          "text": "_abc_impl"
        },
        {
          "id": "libvcs.url.git.GitURL._is_protocol",
          "level": 3,
          "text": "_is_protocol"
        },
        {
          "id": "libvcs.url.git.GitURL.rule_map",
          "level": 3,
          "text": "rule_map"
        },
        {
          "id": "libvcs.url.git.GitURL.is_valid",
          "level": 3,
          "text": "is_valid()"
        },
        {
          "id": "libvcs.url.git.GitURL.to_url",
          "level": 3,
          "text": "to_url()"
        }
      ]
    },
    {
      "title": "Mercurial URL Parser - libvcs.url.hg",
      "description": "For hg, aka hg(1).",
      "section": "Documentation",
      "url": "/url/hg/",
      "markdownUrl": "/url/hg.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "Mercurial URL Parser - libvcs.url.hg"
        },
        {
          "id": "libvcs.url.hg.DEFAULT_RULES",
          "level": 2,
          "text": "DEFAULT_RULES"
        },
        {
          "id": "libvcs.url.hg.PIP_DEFAULT_RULES",
          "level": 2,
          "text": "PIP_DEFAULT_RULES"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL",
          "level": 2,
          "text": "HgBaseURL"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL.url",
          "level": 3,
          "text": "url"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL.scheme",
          "level": 3,
          "text": "scheme"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL.user",
          "level": 3,
          "text": "user"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL.hostname",
          "level": 3,
          "text": "hostname"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL.port",
          "level": 3,
          "text": "port"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL.separator",
          "level": 3,
          "text": "separator"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL.path",
          "level": 3,
          "text": "path"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL.suffix",
          "level": 3,
          "text": "suffix"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL.ref",
          "level": 3,
          "text": "ref"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL.rule",
          "level": 3,
          "text": "rule"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL.rule_map",
          "level": 3,
          "text": "rule_map"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL.is_valid",
          "level": 3,
          "text": "is_valid()"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL.to_url",
          "level": 3,
          "text": "to_url()"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL._abc_impl",
          "level": 3,
          "text": "_abc_impl"
        },
        {
          "id": "libvcs.url.hg.HgBaseURL._is_protocol",
          "level": 3,
          "text": "_is_protocol"
        },
        {
          "id": "libvcs.url.hg.HgPipURL",
          "level": 2,
          "text": "HgPipURL"
        },
        {
          "id": "libvcs.url.hg.HgPipURL.rev",
          "level": 3,
          "text": "rev"
        },
        {
          "id": "libvcs.url.hg.HgPipURL.rule_map",
          "level": 3,
          "text": "rule_map"
        },
        {
          "id": "libvcs.url.hg.HgPipURL.is_valid",
          "level": 3,
          "text": "is_valid()"
        },
        {
          "id": "libvcs.url.hg.HgPipURL.to_url",
          "level": 3,
          "text": "to_url()"
        },
        {
          "id": "libvcs.url.hg.HgPipURL.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.url.hg.HgPipURL._abc_impl",
          "level": 3,
          "text": "_abc_impl"
        },
        {
          "id": "libvcs.url.hg.HgPipURL._is_protocol",
          "level": 3,
          "text": "_is_protocol"
        },
        {
          "id": "libvcs.url.hg.HgURL",
          "level": 2,
          "text": "HgURL"
        },
        {
          "id": "libvcs.url.hg.HgURL.rule_map",
          "level": 3,
          "text": "rule_map"
        },
        {
          "id": "libvcs.url.hg.HgURL.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.url.hg.HgURL._abc_impl",
          "level": 3,
          "text": "_abc_impl"
        },
        {
          "id": "libvcs.url.hg.HgURL._is_protocol",
          "level": 3,
          "text": "_is_protocol"
        },
        {
          "id": "libvcs.url.hg.HgURL.is_valid",
          "level": 3,
          "text": "is_valid()"
        },
        {
          "id": "libvcs.url.hg.HgURL.to_url",
          "level": 3,
          "text": "to_url()"
        }
      ]
    },
    {
      "title": "URL Parser - libvcs.url",
      "description": "We all love urllib.parse, but what about VCS systems?",
      "section": "Documentation",
      "url": "/url/",
      "markdownUrl": "/url/index.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "URL Parser - libvcs.url"
        },
        {
          "id": "modules",
          "level": 2,
          "text": "Modules"
        },
        {
          "id": "validate-and-detect-vcs-urls",
          "level": 2,
          "text": "Validate and detect VCS URLs"
        },
        {
          "id": "parse-vcs-urls",
          "level": 2,
          "text": "Parse VCS URLs"
        },
        {
          "id": "export-usable-urls",
          "level": 2,
          "text": "Export usable URLs"
        },
        {
          "id": "scope",
          "level": 2,
          "text": "Scope"
        },
        {
          "id": "out-of-the-box",
          "level": 3,
          "text": "Out of the box"
        },
        {
          "id": "extendability",
          "level": 2,
          "text": "Extendability"
        },
        {
          "id": "matchers-defaults",
          "level": 3,
          "text": "Matchers: Defaults"
        },
        {
          "id": "matchers-first-wins",
          "level": 3,
          "text": "Matchers: First wins"
        }
      ]
    },
    {
      "title": "VCS Detection - libvcs.url.registry",
      "description": "Detect VCS from git, hg, and svn URLs.",
      "section": "Documentation",
      "url": "/url/registry/",
      "markdownUrl": "/url/registry.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "VCS Detection - libvcs.url.registry"
        },
        {
          "id": "libvcs.url.registry.ParserMatch",
          "level": 2,
          "text": "ParserMatch"
        },
        {
          "id": "libvcs.url.registry.ParserMatch.vcs",
          "level": 3,
          "text": "vcs"
        },
        {
          "id": "libvcs.url.registry.ParserMatch.match",
          "level": 3,
          "text": "match"
        },
        {
          "id": "libvcs.url.registry.ParserMatch.__new__",
          "level": 3,
          "text": "__new__()"
        },
        {
          "id": "libvcs.url.registry.ParserMatch._asdict",
          "level": 3,
          "text": "_asdict()"
        },
        {
          "id": "libvcs.url.registry.ParserMatch._field_defaults",
          "level": 3,
          "text": "_field_defaults"
        },
        {
          "id": "libvcs.url.registry.ParserMatch._fields",
          "level": 3,
          "text": "_fields"
        },
        {
          "id": "libvcs.url.registry.ParserMatch._make",
          "level": 3,
          "text": "_make()"
        },
        {
          "id": "libvcs.url.registry.ParserMatch._replace",
          "level": 3,
          "text": "_replace()"
        },
        {
          "id": "libvcs.url.registry.VCSRegistry",
          "level": 2,
          "text": "VCSRegistry"
        },
        {
          "id": "libvcs.url.registry.VCSRegistry.parser_map",
          "level": 3,
          "text": "parser_map"
        },
        {
          "id": "libvcs.url.registry.VCSRegistry.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.url.registry.VCSRegistry.match",
          "level": 3,
          "text": "match()"
        }
      ]
    },
    {
      "title": "SVN URL Parser - libvcs.url.svn",
      "description": "For svn, aka svn(1).",
      "section": "Documentation",
      "url": "/url/svn/",
      "markdownUrl": "/url/svn.md",
      "headings": [
        {
          "id": "",
          "level": 1,
          "text": "SVN URL Parser - libvcs.url.svn"
        },
        {
          "id": "libvcs.url.svn.DEFAULT_RULES",
          "level": 2,
          "text": "DEFAULT_RULES"
        },
        {
          "id": "libvcs.url.svn.PIP_DEFAULT_RULES",
          "level": 2,
          "text": "PIP_DEFAULT_RULES"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL",
          "level": 2,
          "text": "SvnBaseURL"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL.url",
          "level": 3,
          "text": "url"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL.scheme",
          "level": 3,
          "text": "scheme"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL.user",
          "level": 3,
          "text": "user"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL.hostname",
          "level": 3,
          "text": "hostname"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL.port",
          "level": 3,
          "text": "port"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL.separator",
          "level": 3,
          "text": "separator"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL.path",
          "level": 3,
          "text": "path"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL.ref",
          "level": 3,
          "text": "ref"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL.rule",
          "level": 3,
          "text": "rule"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL.rule_map",
          "level": 3,
          "text": "rule_map"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL.is_valid",
          "level": 3,
          "text": "is_valid()"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL.to_url",
          "level": 3,
          "text": "to_url()"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL._abc_impl",
          "level": 3,
          "text": "_abc_impl"
        },
        {
          "id": "libvcs.url.svn.SvnBaseURL._is_protocol",
          "level": 3,
          "text": "_is_protocol"
        },
        {
          "id": "libvcs.url.svn.SvnPipURL",
          "level": 2,
          "text": "SvnPipURL"
        },
        {
          "id": "libvcs.url.svn.SvnPipURL.rev",
          "level": 3,
          "text": "rev"
        },
        {
          "id": "libvcs.url.svn.SvnPipURL.rule_map",
          "level": 3,
          "text": "rule_map"
        },
        {
          "id": "libvcs.url.svn.SvnPipURL.is_valid",
          "level": 3,
          "text": "is_valid()"
        },
        {
          "id": "libvcs.url.svn.SvnPipURL.to_url",
          "level": 3,
          "text": "to_url()"
        },
        {
          "id": "libvcs.url.svn.SvnPipURL.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.url.svn.SvnPipURL._abc_impl",
          "level": 3,
          "text": "_abc_impl"
        },
        {
          "id": "libvcs.url.svn.SvnPipURL._is_protocol",
          "level": 3,
          "text": "_is_protocol"
        },
        {
          "id": "libvcs.url.svn.SvnURL",
          "level": 2,
          "text": "SvnURL"
        },
        {
          "id": "libvcs.url.svn.SvnURL.rule_map",
          "level": 3,
          "text": "rule_map"
        },
        {
          "id": "libvcs.url.svn.SvnURL.__init__",
          "level": 3,
          "text": "__init__()"
        },
        {
          "id": "libvcs.url.svn.SvnURL._abc_impl",
          "level": 3,
          "text": "_abc_impl"
        },
        {
          "id": "libvcs.url.svn.SvnURL._is_protocol",
          "level": 3,
          "text": "_is_protocol"
        },
        {
          "id": "libvcs.url.svn.SvnURL.is_valid",
          "level": 3,
          "text": "is_valid()"
        },
        {
          "id": "libvcs.url.svn.SvnURL.to_url",
          "level": 3,
          "text": "to_url()"
        }
      ]
    }
  ]
}
