From a86f427a0d9d0e1e0c60b443dd0ae66cb10f662a Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Mon, 6 Jul 2026 04:37:59 +0900 Subject: [PATCH] lexicons: new `git.merge*` method schema Signed-off-by: Seongmin Lee --- api/tangled/gitdefs.go | 17 +++++++ api/tangled/gitmergeCheck.go | 59 +++++++++++++++++++++ api/tangled/gitmergeCommit.go | 53 +++++++++++++++++++ lexicons/git/defs.json | 25 +++++++++ lexicons/git/mergeCheck.json | 96 +++++++++++++++++++++++++++++++++++ lexicons/git/mergeCommit.json | 68 +++++++++++++++++++++++++ lexicons/repo/merge.json | 2 +- 7 files changed, 319 insertions(+), 1 deletion(-) create mode 100644 api/tangled/gitdefs.go create mode 100644 api/tangled/gitmergeCheck.go create mode 100644 api/tangled/gitmergeCommit.go create mode 100644 lexicons/git/defs.json create mode 100644 lexicons/git/mergeCheck.json create mode 100644 lexicons/git/mergeCommit.json diff --git a/api/tangled/gitdefs.go b/api/tangled/gitdefs.go new file mode 100644 index 00000000..80fcc3e9 --- /dev/null +++ b/api/tangled/gitdefs.go @@ -0,0 +1,17 @@ +// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT. + +package tangled + +// schema: sh.tangled.git.defs + +const () + +// GitDefs_Signature is a "signature" in the sh.tangled.git.defs schema. +type GitDefs_Signature struct { + // email: Person email + Email string `json:"email" cborgen:"email"` + // name: Person name + Name string `json:"name" cborgen:"name"` + // when: Timestamp of the signature + When string `json:"when" cborgen:"when"` +} diff --git a/api/tangled/gitmergeCheck.go b/api/tangled/gitmergeCheck.go new file mode 100644 index 00000000..ad61b06b --- /dev/null +++ b/api/tangled/gitmergeCheck.go @@ -0,0 +1,59 @@ +// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT. + +package tangled + +// schema: sh.tangled.git.mergeCheck + +import ( + "context" + + "github.com/bluesky-social/indigo/lex/util" +) + +const ( + GitMergeCheckNSID = "sh.tangled.git.mergeCheck" +) + +// GitMergeCheck_ConflictInfo is a "conflictInfo" in the sh.tangled.git.mergeCheck schema. +type GitMergeCheck_ConflictInfo struct { + // filename: Name of the conflicted file + Filename string `json:"filename" cborgen:"filename"` + // reason: Reason for the conflict + Reason string `json:"reason" cborgen:"reason"` +} + +// GitMergeCheck_Input is the input argument to a sh.tangled.git.mergeCheck call. +type GitMergeCheck_Input struct { + // branch: Target branch to merge into + Branch string `json:"branch" cborgen:"branch"` + // repo: DID of Git repository + Repo string `json:"repo" cborgen:"repo"` + Source *GitMergeCheck_Input_Source `json:"source" cborgen:"source"` +} + +type GitMergeCheck_Input_Source struct { + // commit: Head commit ID of PR to merge + Commit string `json:"commit" cborgen:"commit"` + // repo: DID of source git repository + Repo string `json:"repo" cborgen:"repo"` +} + +// GitMergeCheck_Output is the output of a sh.tangled.git.mergeCheck call. +type GitMergeCheck_Output struct { + // conflicts: List of files with merge conflicts + Conflicts []*GitMergeCheck_ConflictInfo `json:"conflicts,omitempty" cborgen:"conflicts,omitempty"` + // isConflicted: Whether the merge has conflicts + IsConflicted bool `json:"isConflicted" cborgen:"isConflicted"` + // message: Additional message about the merge check + Message *string `json:"message,omitempty" cborgen:"message,omitempty"` +} + +// GitMergeCheck calls the XRPC method "sh.tangled.git.mergeCheck". +func GitMergeCheck(ctx context.Context, c util.LexClient, input *GitMergeCheck_Input) (*GitMergeCheck_Output, error) { + var out GitMergeCheck_Output + if err := c.LexDo(ctx, util.Procedure, "application/json", "sh.tangled.git.mergeCheck", nil, input, &out); err != nil { + return nil, err + } + + return &out, nil +} diff --git a/api/tangled/gitmergeCommit.go b/api/tangled/gitmergeCommit.go new file mode 100644 index 00000000..7e9d24f9 --- /dev/null +++ b/api/tangled/gitmergeCommit.go @@ -0,0 +1,53 @@ +// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT. + +package tangled + +// schema: sh.tangled.git.mergeCommit + +import ( + "context" + + "github.com/bluesky-social/indigo/lex/util" +) + +const ( + GitMergeCommitNSID = "sh.tangled.git.mergeCommit" +) + +// GitMergeCommit_Input is the input argument to a sh.tangled.git.mergeCommit call. +type GitMergeCommit_Input struct { + // mergeCommit: Merge commit content. Used when merge commit is created. + MergeCommit *GitMergeCommit_Input_MergeCommit `json:"mergeCommit,omitempty" cborgen:"mergeCommit,omitempty"` + Source *GitMergeCommit_Input_Source `json:"source" cborgen:"source"` + Style string `json:"style" cborgen:"style"` + Target *GitMergeCommit_Input_Target `json:"target" cborgen:"target"` +} + +// Merge commit content. Used when merge commit is created. +type GitMergeCommit_Input_MergeCommit struct { + Author *GitDefs_Signature `json:"author,omitempty" cborgen:"author,omitempty"` + Message *string `json:"message,omitempty" cborgen:"message,omitempty"` +} + +type GitMergeCommit_Input_Source struct { + // commit: Head commit ID to merge + Commit string `json:"commit" cborgen:"commit"` + // repo: DID of source git repository + Repo string `json:"repo" cborgen:"repo"` +} + +type GitMergeCommit_Input_Target struct { + // branch: Target branch to merge into + Branch string `json:"branch" cborgen:"branch"` + // repo: DID of target git repository + Repo string `json:"repo" cborgen:"repo"` +} + +// GitMergeCommit calls the XRPC method "sh.tangled.git.mergeCommit". +func GitMergeCommit(ctx context.Context, c util.LexClient, input *GitMergeCommit_Input) error { + if err := c.LexDo(ctx, util.Procedure, "application/json", "sh.tangled.git.mergeCommit", nil, input, nil); err != nil { + return err + } + + return nil +} diff --git a/lexicons/git/defs.json b/lexicons/git/defs.json new file mode 100644 index 00000000..a72387f5 --- /dev/null +++ b/lexicons/git/defs.json @@ -0,0 +1,25 @@ +{ + "lexicon": 1, + "id": "sh.tangled.git.defs", + "defs": { + "signature": { + "type": "object", + "required": ["name", "email", "when"], + "properties": { + "name": { + "type": "string", + "description": "Person name" + }, + "email": { + "type": "string", + "description": "Person email" + }, + "when": { + "type": "string", + "format": "datetime", + "description": "Timestamp of the signature" + } + } + } + } +} diff --git a/lexicons/git/mergeCheck.json b/lexicons/git/mergeCheck.json new file mode 100644 index 00000000..cd0cb42a --- /dev/null +++ b/lexicons/git/mergeCheck.json @@ -0,0 +1,96 @@ +{ + "lexicon": 1, + "id": "sh.tangled.git.mergeCheck", + "defs": { + "main": { + "type": "procedure", + "description": "Check if a merge is possible between two branches. Performs 3-way merge check", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["repo", "branch", "source"], + "properties": { + "repo": { + "type": "string", + "format": "did", + "description": "DID of Git repository" + }, + "branch": { + "type": "string", + "description": "Target branch to merge into" + }, + "source": { + "type": "object", + "required": ["repo", "commit"], + "properties": { + "repo": { + "type": "string", + "format": "did", + "description": "DID of source git repository" + }, + "commit": { + "type": "string", + "description": "Head commit ID of PR to merge" + } + } + } + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["isConflicted"], + "properties": { + "isConflicted": { + "type": "boolean", + "description": "Whether the merge has conflicts" + }, + "conflicts": { + "type": "array", + "description": "List of files with merge conflicts", + "items": { + "type": "ref", + "ref": "#conflictInfo" + } + }, + "message": { + "type": "string", + "description": "Additional message about the merge check" + } + } + } + }, + "errors": [ + { + "name": "InvalidRequest", + "description": "Invalid request parameters" + }, + { + "name": "RepoNotFound", + "description": "Repo is not registered on this knot" + }, + { + "name": "CommitNotFound", + "description": "Commit is not found from source Repo" + } + ] + }, + "conflictInfo": { + "type": "object", + "required": ["filename", "reason"], + "properties": { + "filename": { + "type": "string", + "description": "Name of the conflicted file" + }, + "reason": { + "type": "string", + "description": "Reason for the conflict" + } + } + } + } +} diff --git a/lexicons/git/mergeCommit.json b/lexicons/git/mergeCommit.json new file mode 100644 index 00000000..4349323d --- /dev/null +++ b/lexicons/git/mergeCommit.json @@ -0,0 +1,68 @@ +{ + "lexicon": 1, + "id": "sh.tangled.git.mergeCommit", + "defs": { + "main": { + "type": "procedure", + "description": "Merge a commit into repository's branch", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["target", "source", "style"], + "properties": { + "target": { + "type": "object", + "required": ["repo", "branch"], + "properties": { + "repo": { + "type": "string", + "format": "did", + "description": "DID of target git repository" + }, + "branch": { + "type": "string", + "description": "Target branch to merge into" + } + } + }, + "source": { + "type": "object", + "required": ["repo", "commit"], + "properties": { + "repo": { + "type": "string", + "format": "did", + "description": "DID of source git repository" + }, + "commit": { + "type": "string", + "description": "Head commit ID to merge" + } + } + }, + "style": { + "type": "string", + "enum": [ + "rebase", + "merge", + "rebase-merge", + "squash-rebase", + "squash-rebase-merge", + "fast-forward-only" + ] + }, + "mergeCommit": { + "type": "object", + "description": "Merge commit content. Used when merge commit is created.", + "properties": { + "author": { "type": "ref", "ref": "sh.tangled.git.defs#signature" }, + "message": { "type": "string", "maxLength": 1000000 } + } + } + } + } + } + } + } +} diff --git a/lexicons/repo/merge.json b/lexicons/repo/merge.json index ffd2104d..ff7843b7 100644 --- a/lexicons/repo/merge.json +++ b/lexicons/repo/merge.json @@ -4,7 +4,7 @@ "defs": { "main": { "type": "procedure", - "description": "Merge a patch into a repository branch", + "description": "DEPRECATED: Merge a patch into a repository branch", "input": { "encoding": "application/json", "schema": { -- 2.51.2