pyado Public API Reference¶
One-page signature summary of every public symbol. For prose explanations and worked examples see usage.md. For the complete agent reference (gotchas, type details, enums) see AGENT.md.
Imports¶
import pyado # raw layer + AzureDevOpsService
from pyado.oop import AzureDevOpsService # preferred OOP entry point
OOP Layer (pyado.oop)¶
The OOP layer is the recommended interface. All classes are importable from
pyado.oop. Objects form a hierarchy:
AzureDevOpsService → Organization → Project → Repository → PullRequest
→ WorkItem
→ Build ←→ Pipeline
→ Pipeline → PipelineRun
→ VariableGroup
→ Team
→ Iteration / Area
Navigation up the hierarchy (.project, .repo, .org) is always zero-cost.
AzureDevOpsService¶
Entry point and object cache. Resolves auth from explicit args or env vars.
AzureDevOpsService(
*,
org: str | None = None, # bare org name (or AZURE_DEVOPS_ORG / SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)
org_url: str | None = None, # full URL, e.g. "https://dev.azure.com/myorg"
pat: str | None = None, # personal access token (or AZURE_DEVOPS_EXT_PAT)
credential: TokenCredential | None = None, # azure-identity credential
session: requests.Session | None = None, # custom SSL/trust-store session
)
Member |
Signature |
Description |
|---|---|---|
|
|
Organisation singleton (zero-cost after first call) |
|
|
Org-level API call for direct |
|
|
Clear all cached objects |
Organization¶
Obtained via AzureDevOpsService.org.
Method |
Signature |
Description |
|---|---|---|
|
|
Org-level API call |
|
|
Fetch project by name (cached) |
|
|
Iterate all projects in the org |
|
|
Org metadata + authenticated user |
|
|
Profile of the authenticated user |
|
|
Resolve subject descriptors |
|
|
All graph groups in the org |
Project¶
Obtained via Organization.get_project / Organization.iter_projects.
Properties (lazy-fetched on first access unless noted):
Property |
Type |
Description |
|---|---|---|
|
|
Project name — always known, no API call |
|
|
Project UUID (lazy-fetched if not supplied) |
|
|
Full project data (lazy-fetched) |
|
|
Project-level API call |
|
|
Parent org — zero-cost |
Methods:
Method |
Signature |
Description |
|---|---|---|
|
|
Discard cached info and child-scope caches |
|
|
All repos in the project |
|
|
Repo by name or UUID string |
|
|
All active PRs across all repos |
|
|
PRs with optional criteria/expand |
|
|
PR by ID, optionally scoped to repo |
|
|
Single work item with RELATIONS expand |
|
|
Work items from a WIQL query |
|
|
Create new work item |
|
|
Batch-fetch multiple work items |
|
|
Single build by ID |
|
|
Builds with optional filters |
|
|
Queue a new build |
|
|
Classic build pipeline definitions |
|
|
Pipelines v2 definitions |
|
|
Single Pipeline v2 definition |
|
|
Pipeline v2 definition by name (case-sensitive) |
|
|
Pending environment approvals |
|
|
Approve a pending gate |
|
|
Reject a pending gate |
|
|
All variable groups |
|
|
Variable group by name |
|
|
Variable group by numeric ID |
|
|
Create a new variable group |
|
|
Root-level WIT query folders |
|
|
Specific WIT query folder by UUID |
|
|
Iteration classification tree node |
|
|
Create iteration node; returns GUID |
|
|
Sprint iterations for a team |
|
|
Assign iteration to a team |
|
|
Team area-path configuration |
|
|
Area classification tree node |
|
|
Create area node; returns GUID |
|
|
All teams in the project |
|
|
Team by name or UUID |
Repository¶
Obtained via Project.get_repository / Project.iter_repositories.
Properties:
Property |
Type |
Description |
|---|---|---|
|
|
Repository UUID |
|
|
Repository name |
|
|
Default branch ref (e.g. |
|
|
Web URL in the ADO portal |
|
|
Full repository data |
|
|
Repository-level API call |
|
|
Parent project — zero-cost |
|
|
Parent org — zero-cost |
Methods:
Method |
Signature |
Description |
|---|---|---|
|
|
Re-fetch repository info |
|
|
Single PR by ID |
|
|
PRs with optional criteria |
|
|
Create new PR |
|
|
First active PR whose source contains sha |
|
|
First active PR for a source branch |
|
|
File content at branch tip |
|
|
File content at commit SHA |
|
|
Raw file bytes at branch tip |
|
|
Raw file bytes at commit SHA |
|
|
Git refs with optional filters |
|
|
Create new branch at commit SHA |
|
|
Delete branch (optimistic-concurrency check) |
|
|
Commits with optional filters |
|
|
Single commit by SHA |
|
|
HEAD commit of the default branch |
|
|
Most recent commit touching a file |
|
|
File changes between two commits (paginated) |
|
|
Ahead/behind counts for a branch |
|
|
Repository access control lists |
|
|
Push a single commit |
|
|
Delete a file in one commit |
|
|
Rename/move a file in one commit |
|
|
Low-level multi-commit push |
|
|
Ref-update entry with current HEAD SHA |
PullRequest¶
Obtained via Repository.get_pull_request, Repository.iter_pull_requests,
Repository.create_pull_request, Project.get_pull_request,
Project.iter_pull_requests, etc.
Properties:
Property |
Type |
Description |
|---|---|---|
|
|
Numeric PR ID |
|
|
PR title |
|
|
Lifecycle status ( |
|
|
Source ref name |
|
|
Target ref name |
|
|
PR description body |
|
|
Display name of the creator |
|
|
Raw PR data |
|
|
PR-level API call |
|
|
Parent repo — zero-cost |
|
|
Parent project — zero-cost |
|
|
Parent org — zero-cost |
Methods:
Method |
Signature |
Description |
|---|---|---|
|
|
Re-fetch PR info |
|
|
Update PR metadata |
|
|
Complete (merge) the PR |
|
|
Abandon the PR |
|
|
Enable auto-complete (defaults to own identity) |
|
|
Clear auto-complete |
|
|
Link PR to a work item via ArtifactLink |
|
|
Set work items shown on the PR page |
|
|
Label name strings |
|
|
Full label objects |
|
|
Add a label |
|
|
Remove a label |
|
|
Set labels to exactly desired |
|
|
All reviewers |
|
|
Add/update a reviewer |
|
|
Remove a reviewer |
|
|
Cast a vote |
|
|
All review threads |
|
|
Single thread by ID |
|
|
Create a review thread |
|
|
Reply to a thread |
|
|
Change thread status |
|
|
Commits in the PR |
|
|
Linked work item IDs |
|
|
Linked work items (batch-fetched) |
|
|
Push iterations |
|
|
File changes for an iteration |
|
|
All files changed in the PR (latest iteration) |
|
|
Status checks on the PR |
|
|
Post a status check result |
WorkItem¶
Obtained via Project.get_work_item, Project.iter_work_items, Project.create_work_item.
Properties:
Property |
Type |
Description |
|---|---|---|
|
|
Numeric work item ID |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Full work item data |
|
|
Work-item-level API call |
|
|
Parent project — zero-cost |
|
|
Parent org — zero-cost |
Methods:
Method |
Signature |
Description |
|---|---|---|
|
|
Value of any field by reference name |
|
|
Re-fetch work item info |
|
|
Update fields |
|
|
Move to different iteration/area |
|
|
Soft-delete the work item |
|
|
Tags currently set |
|
|
Add a tag; returns updated list |
|
|
Remove a tag; returns updated list |
|
|
All comments |
|
|
Add a comment |
|
|
Edit an existing comment |
|
|
Delete a comment |
|
|
Upload and attach a file |
|
|
Link to another work item |
|
|
Link to a pull request (ArtifactLink) |
|
|
Link to a build (ArtifactLink) |
|
|
Link to a commit (ArtifactLink) |
|
|
Remove a specific relation |
|
|
All (or filtered) relations |
|
|
Artifact links (PRs, builds, commits) |
|
|
Attached file relations |
|
|
Linked work items (batch-fetched) |
|
|
Parent work item, or None |
|
|
Direct child work items |
|
|
Child IDs from cached relations (no API call) |
Build¶
Obtained via Project.get_build, Project.iter_builds, Project.start_build.
Properties:
Property |
Type |
Description |
|---|---|---|
|
|
Numeric build ID |
|
|
Current build status |
|
|
Build number string |
|
|
Outcome once completed |
|
|
Source branch ref |
|
|
UTC start time |
|
|
UTC finish time |
|
|
UTC time when the build was queued |
|
|
Commit SHA that triggered this build |
|
|
Display name of the identity that queued the build |
|
|
Display name of the identity the build was requested for |
|
|
Full build data |
|
|
Build-level API call |
|
|
Owning pipeline — zero-cost (cache lookup) |
|
|
Parent project — zero-cost |
|
|
Parent org — zero-cost |
Methods:
Method |
Signature |
Description |
|---|---|---|
|
|
Re-fetch build info |
|
|
Update build status |
|
|
Request cancellation (Build API) |
|
|
Request cancellation (Pipelines v2 API) |
|
|
Queue new build with same definition/branch |
|
|
Published artifacts |
|
|
Tags on the build |
|
|
Add a tag |
|
|
Remove a tag |
|
|
Fetch plain-text log content |
|
|
All log containers for the build |
|
|
Fetch and concatenate all log text |
|
|
Raw timeline records |
|
|
First record matching predicate |
|
|
Build stages (with nested jobs/tasks) |
|
|
Linked work item IDs |
|
|
Linked work items (batch-fetched) |
|
|
Work items in build range (exclusive lower bound) |
|
|
Work item IDs in build range |
|
|
External/serverless task handle |
Pipeline / PipelineRun¶
Obtained via Project.get_pipeline, Project.iter_pipelines, or Build.pipeline.
Pipeline properties: .id, .name, .info, .api_call, .project, .org
Method |
Signature |
Description |
|---|---|---|
|
|
Discard cached pipeline info |
|
|
All runs |
|
|
Single run by ID |
|
|
Most recent run |
|
|
Trigger new run |
|
|
Cancel an in-progress run |
|
|
Grant/revoke resource access |
PipelineRun properties: .id, .status, .result, .info, .pipeline, .project, .org
Method |
Signature |
Description |
|---|---|---|
|
|
Request cancellation |
VariableGroup¶
Obtained via Project.iter_variable_groups, Project.get_variable_group.
Properties: .id, .name, .variables, .info, .api_call, .project, .org
Method |
Signature |
Description |
|---|---|---|
|
|
Re-fetch variable group info |
|
|
Replace all variables (and optionally metadata) |
|
|
Set or update a single variable |
|
|
Remove a single variable |
|
|
Permanently delete the variable group |
BuildStage / BuildPhase / BuildJob / BuildTask¶
Obtained via Build.iter_stages().
BuildStage.iter_phases() -> Iterator[BuildPhase]
BuildPhase.iter_jobs() -> Iterator[BuildJob]
BuildJob.iter_tasks() -> Iterator[BuildTask]
Each level exposes .record (BuildRecordInfo), .name, .status, .result,
.log (BuildLogInfo | None), .start_time, .finish_time.
Team¶
Obtained via Project.iter_teams, Project.get_team.
Properties: .id, .name, .info, .api_call, .project, .org
Methods:
Method |
Signature |
Description |
|---|---|---|
|
|
Sprint iterations for the team |
|
|
Team area-path configuration |
|
|
Assign an iteration to the team |
|
|
Iterate team members |
|
|
All team members as a list |
Iteration / Area¶
Obtained via Project.get_iteration_node, Project.get_area_node.
Properties: .id, .name, .path, .info (ClassificationNode), .project
Methods:
Method |
Signature |
Description |
|---|---|---|
|
|
Child nodes at next depth level |
|
|
Re-fetch with optional depth |
Commit¶
Obtained via Repository.iter_commits, Repository.get_commit, etc.
Properties: .sha (CommitId), .message, .author, .committer, .parents, .info (GitCommitRef), .repo
File change types (for Repository.commit)¶
Class |
Constructor |
Description |
|---|---|---|
|
|
Add a new file |
|
|
Edit an existing file |
|
|
Delete a file |
|
|
Rename/move a file |
Raw Layer (pyado.raw / import pyado)¶
Lower-level functions — one per ADO REST endpoint. Each takes an ApiCall as
its first argument and returns a Pydantic model. Use when the OOP layer does
not cover an endpoint.
ApiCall¶
ApiCall(
access_token: str,
url: ADOUrl,
parameters: dict[str, int | str | bool] = {},
session: requests.Session | None = None,
timeout: int = 10,
)
Method |
Signature |
Description |
|---|---|---|
|
|
Extend URL path and merge query params |
|
|
HTTP GET |
|
|
HTTP GET, returns raw bytes |
|
|
HTTP POST |
|
|
HTTP PUT |
|
|
HTTP PATCH |
|
|
HTTP DELETE |
Helpers:
get_session(access_token: str) -> requests.Session
# Return the LRU-cached session; useful to inject a custom SSL adapter.
get_test_api_call() -> tuple[ApiCall, dict]
# Build an ApiCall from src/pyado/raw/test.json (for manual testing).
Profile / Connection¶
get_profile_api_call(access_token) -> ApiCall
# ApiCall for https://app.vssps.visualstudio.com/_apis
get_my_profile(profile_api_call) -> UserProfile
# Profile of the authenticated user.
get_connection_data(org_api_call) -> ConnectionData
# Org connection metadata including authenticated user identity.
Projects¶
get_project(org_api_call, name: str) -> ProjectInfo
# Fetch a single project by name or UUID string.
iter_projects(org_api_call) -> Iterator[ProjectInfo]
# All projects in the org (paginated).
Repositories¶
iter_repository_details(project_api_call) -> Iterator[RepositoryInfo]
# All repos in the project.
get_repository_api_call(project_api_call, repository_id: UUID) -> ApiCall
# Repo-level ApiCall.
get_repository_info(repository_api_call) -> RepositoryInfo
# Fetch repo details.
get_repository_item_bytes(repository_api_call, path, version_descriptor_version,
version_descriptor_type) -> bytes | None
# Raw file bytes at a version.
get_repository_commits(repository_api_call, search_criteria) -> list[GitCommitRef]
# Search commits with optional criteria.
get_commit_by_id(repository_api_call, commit_id) -> GitCommitRef
# Single commit by SHA.
get_commit_diff_page(repository_api_call, base_commit, target_commit, *,
skip, top) -> CommitDiffPage
# One page of file changes between two commits.
get_repository_statistics(repository_api_call, branch) -> BranchStatistics
# Ahead/behind counts for a branch.
iter_refs(repository_api_call, ref_filter) -> Iterator[GitRef]
# Git refs with optional filter.
post_repository_refs(repository_api_call, ref_updates: list[GitRefUpdate]) -> None
# Create/update/delete branches or tags.
post_push(repository_api_call, request: GitPushRequest) -> GitPushResult
# Push one or more commits.
make_ref_update(branch, old_commit) -> GitPushRefUpdate
# Build a ref-update entry; adds refs/heads/ prefix automatically.
make_git_acl_token(project_id, repo_id, branch) -> str
# Build a git ACL token for the security API.
get_git_acl(org_api_call, project_id, repo_id) -> list[AccessControlList]
# ACLs for a repository or all repos in a project.
Pull Requests¶
get_pr_api_call(project_api_call, repository_id, pr_id) -> ApiCall
# PR-level ApiCall.
get_pr_details(pr_api_call, *, expand) -> PullRequestCreated
# Full PR details.
iter_prs(project_api_call, search_criteria, *, expand) -> Iterator[PullRequestListItem]
# PRs matching criteria (paginated).
post_pull_request(repository_api_call, request: PullRequestCreateRequest) -> PullRequestCreated
# Create a new PR.
patch_pr(pr_api_call, update: PullRequestUpdateRequest) -> PullRequestCreated
# Update PR fields.
post_pr_status(pr_api_call, request: PullRequestStatusRequest) -> None
# Post a status item.
iter_pr_statuses(pr_api_call) -> Iterator[PullRequestStatusInfo]
# Status items on the PR.
iter_pr_threads(pr_api_call) -> Iterator[PullRequestThreadResponse]
# Review threads.
get_pr_thread(pr_api_call, thread_id) -> PullRequestThreadResponse
# Single thread by ID.
post_pr_new_thread(pr_api_call, request: PullRequestThreadRequest) -> PullRequestThreadResponse
# Create a review thread.
post_pr_thread_comment(pr_api_call, thread_id, comment) -> PullRequestThreadCommentResponse
# Reply to a thread.
patch_pr_thread(pr_api_call, thread_id, status) -> PullRequestThreadResponse
# Update thread status.
get_pr_labels_details(pr_api_call) -> list[PullRequestLabel]
# All labels.
post_pr_label(pr_api_call, label_name) -> None
# Add a label.
delete_pr_label(pr_api_call, label_name) -> None
# Remove a label.
get_pr_reviewers(pr_api_call) -> list[PullRequestReviewer]
# All reviewers.
put_pr_reviewer(pr_api_call, reviewer_id, request: PullRequestReviewerRequest) -> None
# Add/update a reviewer.
put_pr_reviewer_vote(pr_api_call, reviewer_id, request: PullRequestReviewerVoteRequest) -> None
# Set reviewer vote.
delete_pr_reviewer(pr_api_call, reviewer_id) -> None
# Remove a reviewer.
iter_pr_commits(pr_api_call) -> Iterator[GitCommitRef]
# Commits in the PR.
iter_pr_work_item_ids(pr_api_call) -> Iterator[WorkItemRef]
# Linked work items.
iter_pr_iterations(pr_api_call) -> Iterator[PullRequestIterationRecord]
# Push iterations.
get_pr_iteration_changes(pr_api_call, iteration_id) -> list[PrIterationChange]
# File changes for an iteration.
Work Items¶
get_work_item_api_call(project_api_call, work_item_id) -> ApiCall
# Work-item-level ApiCall.
get_work_item(work_item_api_call, *, expand) -> WorkItemInfo
# Fetch a single work item.
post_work_items_batch(project_api_call, request: WorkItemsBatchRequest) -> list[WorkItemInfo]
# Batch-fetch up to 200 work items.
post_work_item(project_api_call, ticket_type, json_patches) -> WorkItemInfo
# Create a work item (JSON Patch operations).
patch_work_item(work_item_api_call, json_patches) -> WorkItemInfo
# Update a work item (JSON Patch operations).
delete_work_item(work_item_api_call) -> None
# Soft-delete a work item.
post_wiql(project_api_call, query: str) -> list[WorkItemRef]
# Execute WIQL query; returns work item refs.
iter_work_item_comments(work_item_api_call) -> Iterator[WorkItemComment]
# All comments (paginated via continuation token).
post_work_item_comment(work_item_api_call, text, *, comment_format) -> WorkItemComment
# Add a comment.
patch_work_item_comment(work_item_api_call, comment_id, text) -> WorkItemComment
# Edit a comment.
delete_work_item_comment(work_item_api_call, comment_id) -> None
# Delete a comment.
post_work_item_attachment_upload(project_api_call, filename, content) -> WorkItemAttachmentRef
# Upload a file attachment.
get_classification_node(project_call, path, *, node_type, depth) -> ClassificationNode
# Iteration or area classification tree node.
create_classification_node(project_call, request, parent_path, *, node_type) -> str
# Create a classification node; returns GUID.
patch_classification_node(project_call, path, request, *, node_type) -> ClassificationNode
# Rename or update dates of a classification node.
iter_sprint_iterations(team_api_call, timeframe_filter) -> Iterator[SprintIterationInfo]
# Sprint iterations for a team.
add_team_iteration(team_call, iteration_id) -> None
# Assign an iteration to a team.
get_team_field_values(team_call) -> list[TeamFieldValue]
# Team area-path configuration.
get_query_tree(project_call, *, depth, expand) -> list[WorkItemQuery]
# Root WIT query folders.
get_query_folder(project_call, folder_id, *, depth, expand) -> WorkItemQuery
# Specific WIT query folder by GUID.
Builds¶
get_build_api_call(project_api_call, build_id) -> ApiCall
# Build-level ApiCall.
get_build_details(build_api_call) -> BuildDetails
# Full build details.
iter_builds(project_api_call, search_criteria) -> Iterator[BuildDetails]
# Builds matching criteria.
post_build(project_api_call, request: BuildQueueRequest) -> BuildDetails
# Queue a new build.
patch_build(build_api_call, status: BuildStatus) -> BuildDetails
# Update build status.
get_build_log(build_api_call, log_id) -> str
# Plain-text content of a build log.
iter_build_artifacts(build_api_call) -> Iterator[BuildArtifact]
# Artifacts published by the build.
iter_build_tags(build_api_call) -> Iterator[str]
# Tags on the build.
post_build_tag(build_api_call, tag) -> list[str]
# Add a tag.
delete_build_tag(build_api_call, tag) -> list[str]
# Remove a tag.
iter_timeline_records(build_api_call) -> Iterator[BuildRecordInfo]
# Timeline records (stages, jobs, tasks).
iter_build_work_item_ids(build_api_call) -> Iterator[WorkItemRef]
# Work items linked to the build.
iter_work_items_between_builds(project_api_call, from_build_id, to_build_id,
*, top) -> Iterator[WorkItemRef]
# Work items in build range (from_build_id exclusive, to_build_id inclusive).
iter_pipeline_definitions(project_api_call, *, name_filter) -> Iterator[PipelineDefinitionInfo]
# Classic build pipeline definitions.
Pipelines v2¶
iter_pipelines(project_api_call, *, order_by) -> Iterator[PipelineInfo]
# All Pipelines v2 definitions.
get_pipeline(project_api_call, pipeline_id, *, pipeline_version) -> PipelineInfo
# Single pipeline definition.
iter_pipeline_runs(project_api_call, pipeline_id) -> Iterator[PipelineRunInfo]
# All runs of a pipeline.
get_pipeline_run(project_api_call, pipeline_id, run_id) -> PipelineRunInfo
# Single pipeline run.
post_pipeline_run(project_api_call, pipeline_id, request) -> PipelineRunInfo
# Trigger a new pipeline run.
post_pipeline_permission(project_api_call, resource_type, resource_id,
pipeline_id, *, authorized) -> PipelineResourcePermissions
# Authorize/de-authorize a resource for a pipeline (additive only).
Distributed Task / Active Task¶
get_plan_api_call(project_api_call, hub_name, plan_id) -> ApiCall
get_timeline_api_call(project_api_call, hub_name, plan_id, timeline_id) -> ApiCall
get_job_api_call(project_api_call, hub_name, plan_id, timeline_id, job_id) -> ApiCall
get_log_api_call(project_api_call, hub_name, plan_id, log_id) -> ApiCall
post_job_feed(job_api_call, payload: JobFeedPayload) -> None
# Append messages to the task timeline feed.
post_job_logs(log_api_call, message: str) -> None
# Append a log message to the task log.
post_job_event(plan_api_call, payload: JobEventPayload) -> None
# Notify ADO that the task has completed.
patch_timeline_records(timeline_api_call, payload: TimelineRecordsUpdatePayload) -> None
# Update timeline records.
iter_approvals(project_api_call, state) -> Iterator[PipelineApproval]
# Pipeline environment approvals.
patch_approvals(project_api_call, updates: list[PipelineApprovalUpdateRequest]) -> None
# Patch one or more approvals.
Variable Groups¶
get_variable_group_api_call(project_api_call, var_group_id) -> ApiCall
# Variable-group-level ApiCall.
iter_variable_group_details(project_api_call) -> Iterator[VariableGroupInfo]
# All variable groups in the project.
get_variable_group_details(variable_group_api_call) -> VariableGroupInfo
# Single variable group.
put_variable_group(variable_group_api_call, request: VariableGroupUpdateRequest) -> VariableGroupInfo
# Replace a variable group's content.
post_variable_group(project_api_call, request: VariableGroupCreateRequest) -> VariableGroupInfo
# Create a new variable group.
delete_variable_group(variable_group_api_call) -> None
# Permanently delete a variable group.
Teams¶
iter_teams(org_api_call, project_name: str) -> Iterator[TeamInfo]
# All teams in a project.
get_team(org_api_call, project_name, team_name_or_id) -> TeamInfo
# Single team by name or UUID.
Identity / Graph¶
get_vssps_api_call(access_token, org_name) -> ApiCall
# ApiCall for https://vssps.dev.azure.com/{org}.
get_identities(vssps_call, descriptors: list[str]) -> list[IdentityInfo]
# Resolve subject descriptors to identity records.
iter_graph_groups(vssps_call) -> Iterator[GraphGroup]
# All graph groups in the org.
Key Enums and Types¶
Name |
Module |
Description |
|---|---|---|
|
|
Well-known field reference names ( |
|
|
Standard work item state values |
|
|
Standard work item type names |
|
|
Relation type strings ( |
|
|
|
|
|
Expand options: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
All-zeros SHA; use as |
|
|
Security namespace GUID for git ACL lookups |