341 lines
No EOL
10 KiB
YAML
341 lines
No EOL
10 KiB
YAML
openapi: 3.0.0
|
|
info:
|
|
title: CVS Proxy REST API
|
|
description: A Flask-based REST API that provides a proxy for CVS (Concurrent Versions System) repository operations. It allows programmatic access to repository information and file contents.
|
|
version: 1.0.0
|
|
contact:
|
|
name: CVS Proxy Support
|
|
license:
|
|
name: MIT
|
|
|
|
servers:
|
|
- url: http://localhost:5000
|
|
description: Local development server
|
|
- url: https://api.example.com
|
|
description: Production server (configure as needed)
|
|
|
|
tags:
|
|
- name: Repository
|
|
description: Operations for accessing repository structure and content
|
|
- name: Health
|
|
description: Service health and status checks
|
|
|
|
paths:
|
|
/v1/tree:
|
|
get:
|
|
summary: List repository tree structure
|
|
description: Retrieves the directory tree structure of the CVS repository, optionally filtered by module
|
|
operationId: getRepositoryTree
|
|
tags:
|
|
- Repository
|
|
parameters:
|
|
- name: module
|
|
in: query
|
|
description: Optional module or subdirectory to list. If not provided, lists the entire repository
|
|
required: false
|
|
schema:
|
|
type: string
|
|
example: project_name
|
|
responses:
|
|
'200':
|
|
description: Successfully retrieved repository tree
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: File or directory path
|
|
example:
|
|
- src/main.py
|
|
- src/utils.py
|
|
- README.md
|
|
- config/settings.json
|
|
'500':
|
|
description: CVS Client not initialized or error retrieving tree
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
error:
|
|
type: string
|
|
example: CVS Client not initialized
|
|
|
|
/v1/diff:
|
|
get:
|
|
summary: Get diff between two revisions of a file
|
|
description: Retrieves the unified diff output between two specified revisions of a file
|
|
operationId: getFileDiff
|
|
tags:
|
|
- Repository
|
|
parameters:
|
|
- name: file
|
|
in: query
|
|
description: Path to the file in the repository
|
|
required: true
|
|
schema:
|
|
type: string
|
|
example: src/main.py
|
|
- name: rev1
|
|
in: query
|
|
description: First revision number (e.g., 1.1, 1.2)
|
|
required: true
|
|
schema:
|
|
type: string
|
|
example: "1.1"
|
|
- name: rev2
|
|
in: query
|
|
description: Second revision number (e.g., 1.2, 1.3)
|
|
required: true
|
|
schema:
|
|
type: string
|
|
example: "1.2"
|
|
responses:
|
|
'200':
|
|
description: Successfully retrieved diff between revisions
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
diff:
|
|
type: string
|
|
description: Unified diff output
|
|
example:
|
|
diff: |
|
|
--- src/main.py 1.1
|
|
+++ src/main.py 1.2
|
|
@@ -1,5 +1,6 @@
|
|
def main():
|
|
- print("Hello")
|
|
+ print("Hello World")
|
|
return 0
|
|
'400':
|
|
description: Missing required parameters
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
error:
|
|
type: string
|
|
example: Missing required parameters
|
|
'500':
|
|
description: CVS Client not initialized or error generating diff
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
error:
|
|
type: string
|
|
example: Error generating diff for src/main.py between 1.1 and 1.2
|
|
|
|
/v1/history:
|
|
get:
|
|
summary: Get revision history for a file
|
|
description: Retrieves the complete revision history including dates, authors, and change information for a specified file
|
|
operationId: getFileHistory
|
|
tags:
|
|
- Repository
|
|
parameters:
|
|
- name: file
|
|
in: query
|
|
description: Path to the file in the repository
|
|
required: true
|
|
schema:
|
|
type: string
|
|
example: README.md
|
|
responses:
|
|
'200':
|
|
description: Successfully retrieved file revision history
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: object
|
|
properties:
|
|
revision:
|
|
type: string
|
|
description: Revision number
|
|
example: "1.3"
|
|
date:
|
|
type: string
|
|
description: Date and time of the revision
|
|
example: "2024-01-15 10:30:45"
|
|
author:
|
|
type: string
|
|
description: Author who made the revision
|
|
example: john_doe
|
|
state:
|
|
type: string
|
|
description: State of the revision (e.g., Exp, dead)
|
|
example: Exp
|
|
lines_changed:
|
|
type: string
|
|
description: Number of lines added and removed
|
|
example: "+10 -5"
|
|
'400':
|
|
description: Missing required file parameter
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
error:
|
|
type: string
|
|
example: Missing file parameter
|
|
'500':
|
|
description: CVS Client not initialized or error retrieving history
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
error:
|
|
type: string
|
|
example: CVS Client not initialized
|
|
|
|
/v1/file:
|
|
get:
|
|
summary: Get raw file content at a specific revision
|
|
description: Retrieves the raw content of a file, optionally at a specific revision. If no revision is specified, returns the latest version.
|
|
operationId: getFileContent
|
|
tags:
|
|
- Repository
|
|
parameters:
|
|
- name: file
|
|
in: query
|
|
description: Path to the file in the repository
|
|
required: true
|
|
schema:
|
|
type: string
|
|
example: config.json
|
|
- name: revision
|
|
in: query
|
|
description: Optional specific revision number. If not provided, retrieves the latest version.
|
|
required: false
|
|
schema:
|
|
type: string
|
|
example: "1.3"
|
|
responses:
|
|
'200':
|
|
description: Successfully retrieved file content
|
|
content:
|
|
text/plain:
|
|
schema:
|
|
type: string
|
|
description: Raw file content
|
|
example: |
|
|
{
|
|
"app_name": "CVS Proxy",
|
|
"version": "1.0.0"
|
|
}
|
|
'400':
|
|
description: Missing required file parameter
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
error:
|
|
type: string
|
|
example: Missing file parameter
|
|
'500':
|
|
description: CVS Client not initialized or error retrieving file
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
error:
|
|
type: string
|
|
example: Error retrieving content for config.json
|
|
|
|
/v1/health:
|
|
get:
|
|
summary: Health check endpoint
|
|
description: Returns the health status of the CVS Proxy service and CVS client initialization status
|
|
operationId: healthCheck
|
|
tags:
|
|
- Health
|
|
responses:
|
|
'200':
|
|
description: Service is healthy
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
status:
|
|
type: string
|
|
description: Overall service status
|
|
example: healthy
|
|
cvs_client:
|
|
type: string
|
|
description: CVS client initialization status
|
|
enum:
|
|
- initialized
|
|
- not initialized
|
|
example: initialized
|
|
cvs_url:
|
|
type: string
|
|
description: Configured CVS repository URL (or "Not configured" if not set)
|
|
example: ":pserver:username@cvs.example.com:/path/to/repository"
|
|
|
|
components:
|
|
schemas:
|
|
Error:
|
|
type: object
|
|
properties:
|
|
error:
|
|
type: string
|
|
description: Error message describing what went wrong
|
|
required:
|
|
- error
|
|
|
|
FileRevision:
|
|
type: object
|
|
properties:
|
|
revision:
|
|
type: string
|
|
description: CVS revision number
|
|
date:
|
|
type: string
|
|
description: Date and time of the revision
|
|
author:
|
|
type: string
|
|
description: Author of the revision
|
|
state:
|
|
type: string
|
|
description: State of the revision
|
|
lines_changed:
|
|
type: string
|
|
description: Number of lines added and removed
|
|
|
|
HealthStatus:
|
|
type: object
|
|
properties:
|
|
status:
|
|
type: string
|
|
description: Service status
|
|
cvs_client:
|
|
type: string
|
|
description: CVS client status
|
|
cvs_url:
|
|
type: string
|
|
description: Configured CVS URL
|
|
|
|
securitySchemes:
|
|
cvs_auth:
|
|
type: apiKey
|
|
in: header
|
|
name: X-CVS-Auth
|
|
description: CVS authentication is configured via environment variables (CVS_URL). The API does not implement additional authentication beyond CVS repository configuration.
|
|
|
|
info:
|
|
x-logo:
|
|
url: https://www.nongnu.org/cvs/
|
|
altText: CVS Logo |