Whether an open pull can merge now, decided as `knotless merge` decides it, without merging: whether its head merges with its target branch as it is now, and, in a repository that names runners, whether each workflow that runs on it passed there. And what the account asking may do to it: merge it, queue it, retarget it or run its checks again. Requires the session cookie the pages' login sets, or a service token from the caller's PDS, audience the appview's DID, for this method.
Parameters
Output
application/jsonbase
string
Required
The commit its target branch is at, in hex.
checks
string
Required
Where its checks stand at its head merged with its base: pending for those not run there; none when the repository names no runners, so a merge waits for none, or when it conflicts.
passed, failed, running, pending, nonecodeOwnersWarnings
array
Optional
The lines of the target branch's CODEOWNERS file that were skipped, and why: one naming a team, say.
conflicts
array
Optional
The files that conflict.
deletes
string
Optional
Its head branch, which merging deletes unless asked to keep it.
head
string
Required
The commit its head branch is at, in hex.
may
ref#permissions
Required
No description available.
method
string
Required
How it would merge: a fast-forward when the base has not moved since its head branched off, else a merge commit; into a branch protected as linear, one squashed commit.
fastForward, merge, squashqueueBlocked
string
Optional
Why the merge queue would not land it yet, when this server knows: undelegated when no runner the repository names may push, so its queue lands through this server's gateway, and the owner has not delegated writes to it.
undelegatedqueueOnly
boolean
Optional
Its target branch takes pulls only through the merge queue: queue it with dev.knotless.queuePull, as dev.knotless.mergePull refuses it. Absent is false.
reason
string
Optional
Why it cannot merge now, in the words a merge would refuse it with; and when the account asking may not merge it, that too.
reviews
string
Optional
Where its reviews stand against what its target branch's rule asks of them (dev.knotless.repo#reviews): none when the rule asks nothing of them, or when it conflicts.
passed, blocked, nonereviewsMissing
array
Optional
What its reviews lack, each as `knotless merge --check` lists it: `reviews 1 of 2`, `owners of web/: @alice or @bob`, `changes asked by @carol`.
reviewsUncounted
array
Optional
The approvals that do not count toward its target branch's rule, and why: `@dan's approval does not count: only the owner's and collaborators' approvals count`, or one of an earlier head when only approvals of its head as it is now count.
state
string
Required
clean when it can merge now; conflicting when its head does not merge with its base; blocked when its checks have not all passed, or it is not reviewed as its target branch's rule asks; draft, whatever else holds, while its author has not marked it ready.
clean, conflicting, blocked, draftErrors
NotFound
No such repository. AuthenticationRequired
No one asked: log in to the pages first. Try It
Requests are sent directly from your browser. Some servers may block requests due to CORS.
View raw schema
{
"description": "Whether an open pull can merge now, decided as `knotless merge` decides it, without merging: whether its head merges with its target branch as it is now, and, in a repository that names runners, whether each workflow that runs on it passed there. And what the account asking may do to it: merge it, queue it, retarget it or run its checks again. Requires the session cookie the pages' login sets, or a service token from the caller's PDS, audience the appview's DID, for this method.",
"errors": [
{
"description": "No such repository.",
"name": "NotFound"
},
{
"description": "No one asked: log in to the pages first.",
"name": "AuthenticationRequired"
}
],
"output": {
"encoding": "application/json",
"schema": {
"properties": {
"base": {
"description": "The commit its target branch is at, in hex.",
"type": "string"
},
"checks": {
"description": "Where its checks stand at its head merged with its base: pending for those not run there; none when the repository names no runners, so a merge waits for none, or when it conflicts.",
"knownValues": [
"passed",
"failed",
"running",
"pending",
"none"
],
"type": "string"
},
"codeOwnersWarnings": {
"description": "The lines of the target branch's CODEOWNERS file that were skipped, and why: one naming a team, say.",
"items": {
"ref": "#note",
"type": "ref"
},
"type": "array"
},
"conflicts": {
"description": "The files that conflict.",
"items": {
"ref": "#conflict",
"type": "ref"
},
"type": "array"
},
"deletes": {
"description": "Its head branch, which merging deletes unless asked to keep it.",
"type": "string"
},
"head": {
"description": "The commit its head branch is at, in hex.",
"type": "string"
},
"may": {
"ref": "#permissions",
"type": "ref"
},
"method": {
"description": "How it would merge: a fast-forward when the base has not moved since its head branched off, else a merge commit; into a branch protected as linear, one squashed commit.",
"knownValues": [
"fastForward",
"merge",
"squash"
],
"type": "string"
},
"queueBlocked": {
"description": "Why the merge queue would not land it yet, when this server knows: undelegated when no runner the repository names may push, so its queue lands through this server's gateway, and the owner has not delegated writes to it.",
"knownValues": [
"undelegated"
],
"type": "string"
},
"queueOnly": {
"description": "Its target branch takes pulls only through the merge queue: queue it with dev.knotless.queuePull, as dev.knotless.mergePull refuses it. Absent is false.",
"type": "boolean"
},
"reason": {
"description": "Why it cannot merge now, in the words a merge would refuse it with; and when the account asking may not merge it, that too.",
"type": "string"
},
"reviews": {
"description": "Where its reviews stand against what its target branch's rule asks of them (dev.knotless.repo#reviews): none when the rule asks nothing of them, or when it conflicts.",
"knownValues": [
"passed",
"blocked",
"none"
],
"type": "string"
},
"reviewsMissing": {
"description": "What its reviews lack, each as `knotless merge --check` lists it: `reviews 1 of 2`, `owners of web/: @alice or @bob`, `changes asked by @carol`.",
"items": {
"ref": "#note",
"type": "ref"
},
"type": "array"
},
"reviewsUncounted": {
"description": "The approvals that do not count toward its target branch's rule, and why: `@dan's approval does not count: only the owner's and collaborators' approvals count`, or one of an earlier head when only approvals of its head as it is now count.",
"items": {
"ref": "#note",
"type": "ref"
},
"type": "array"
},
"state": {
"description": "clean when it can merge now; conflicting when its head does not merge with its base; blocked when its checks have not all passed, or it is not reviewed as its target branch's rule asks; draft, whatever else holds, while its author has not marked it ready.",
"knownValues": [
"clean",
"conflicting",
"blocked",
"draft"
],
"type": "string"
}
},
"required": [
"state",
"checks",
"method",
"base",
"head",
"may"
],
"type": "object"
}
},
"parameters": {
"properties": {
"pull": {
"description": "The dev.knotless.pull record.",
"format": "at-uri",
"type": "string"
},
"repo": {
"description": "The repository's dev.knotless.repo record, as dev.knotless.getRepo takes it.",
"format": "at-uri",
"type": "string"
}
},
"required": [
"repo",
"pull"
],
"type": "params"
},
"type": "query"
}