mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-01-12 03:21:33 +00:00
Update create repo API to support snapshots
To achieve feature parity with cli, it is now possible to create repos from snapshots
This commit is contained in:
66
api/repos.go
66
api/repos.go
@@ -69,25 +69,32 @@ func apiReposList(c *gin.Context) {
|
||||
c.JSON(200, result)
|
||||
}
|
||||
|
||||
type repoCreateParams struct {
|
||||
// local repository name
|
||||
Name string `binding:"required"`
|
||||
// text describing local repository, for the user
|
||||
Comment string
|
||||
// default distribution when publishing from this local repo
|
||||
DefaultDistribution string
|
||||
// default component when publishing from this local repo
|
||||
DefaultComponent string
|
||||
// snapshot name to create repo from
|
||||
FromSnapshot string
|
||||
}
|
||||
|
||||
// @Summary Create repository
|
||||
// @Description Create a local repository.
|
||||
// @Tags Repos
|
||||
// @Produce json
|
||||
// @Consume json
|
||||
// @Param Name query string false "Name of repository to be created."
|
||||
// @Param Comment query string false "Text describing local repository, for the user"
|
||||
// @Param DefaultDistribution query string false "Default distribution when publishing from this local repo"
|
||||
// @Param DefaultComponent query string false "Default component when publishing from this local repo"
|
||||
// @Param request body repoCreateParams true "Parameters"
|
||||
// @Success 201 {object} deb.LocalRepo
|
||||
// @Failure 400 {object} Error "Repository already exists"
|
||||
// @Failure 404 {object} Error "Source snapshot not found"
|
||||
// @Failure 409 {object} Error "Local repo already exists"
|
||||
// @Failure 500 {object} Error "Internal error"
|
||||
// @Router /api/repos [post]
|
||||
func apiReposCreate(c *gin.Context) {
|
||||
var b struct {
|
||||
Name string `binding:"required"`
|
||||
Comment string
|
||||
DefaultDistribution string
|
||||
DefaultComponent string
|
||||
}
|
||||
var b repoCreateParams
|
||||
|
||||
if c.Bind(&b) != nil {
|
||||
return
|
||||
@@ -98,14 +105,41 @@ func apiReposCreate(c *gin.Context) {
|
||||
repo.DefaultDistribution = b.DefaultDistribution
|
||||
|
||||
collectionFactory := context.NewCollectionFactory()
|
||||
collection := collectionFactory.LocalRepoCollection()
|
||||
err := collection.Add(repo)
|
||||
if err != nil {
|
||||
AbortWithJSONError(c, 400, err)
|
||||
|
||||
if b.FromSnapshot != "" {
|
||||
var snapshot *deb.Snapshot
|
||||
|
||||
snapshotCollection := collectionFactory.SnapshotCollection()
|
||||
|
||||
snapshot, err := snapshotCollection.ByName(b.FromSnapshot)
|
||||
if err != nil {
|
||||
AbortWithJSONError(c, http.StatusNotFound, fmt.Errorf("source snapshot not found: %s", err))
|
||||
return
|
||||
}
|
||||
|
||||
err = snapshotCollection.LoadComplete(snapshot)
|
||||
if err != nil {
|
||||
AbortWithJSONError(c, http.StatusInternalServerError, fmt.Errorf("unable to load source snapshot: %s", err))
|
||||
return
|
||||
}
|
||||
|
||||
repo.UpdateRefList(snapshot.RefList())
|
||||
}
|
||||
|
||||
localRepoCollection := collectionFactory.LocalRepoCollection()
|
||||
|
||||
if _, err := localRepoCollection.ByName(b.Name); err == nil {
|
||||
AbortWithJSONError(c, http.StatusConflict, fmt.Errorf("local repo with name %s already exists", b.Name))
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(201, repo)
|
||||
err := localRepoCollection.Add(repo)
|
||||
if err != nil {
|
||||
AbortWithJSONError(c, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusCreated, repo)
|
||||
}
|
||||
|
||||
// PUT /api/repos/:name
|
||||
|
||||
Reference in New Issue
Block a user