// POST /api/mirrors/:name/snapshots/ func apiSnapshotsCreateFromMirror(c *gin.Context) { var ( err error repo *deb.RemoteRepo snapshot *deb.Snapshot ) var b struct { Name string `binding:"required"` Description string } if !c.Bind(&b) { return } collection := context.CollectionFactory().RemoteRepoCollection() collection.RLock() defer collection.RUnlock() snapshotCollection := context.CollectionFactory().SnapshotCollection() snapshotCollection.Lock() defer snapshotCollection.Unlock() repo, err = collection.ByName(c.Params.ByName("name")) if err != nil { c.Fail(404, err) return } err = repo.CheckLock() if err != nil { c.Fail(409, err) return } err = collection.LoadComplete(repo) if err != nil { c.Fail(500, err) return } snapshot, err = deb.NewSnapshotFromRepository(b.Name, repo) if err != nil { c.Fail(400, err) return } if b.Description != "" { snapshot.Description = b.Description } err = snapshotCollection.Add(snapshot) if err != nil { c.Fail(400, err) return } c.JSON(201, snapshot) }
// PUT /api/snapshots/:name func apiSnapshotsUpdate(c *gin.Context) { var ( err error snapshot *deb.Snapshot ) var b struct { Name string Description string } if !c.Bind(&b) { return } collection := context.CollectionFactory().SnapshotCollection() collection.Lock() defer collection.Unlock() snapshot, err = collection.ByName(c.Params.ByName("name")) if err != nil { c.Fail(404, err) return } _, err = collection.ByName(b.Name) if err == nil { c.Fail(409, fmt.Errorf("unable to rename: snapshot %s already exists", b.Name)) return } if b.Name != "" { snapshot.Name = b.Name } if b.Description != "" { snapshot.Description = b.Description } err = context.CollectionFactory().SnapshotCollection().Update(snapshot) if err != nil { c.Fail(500, err) return } c.JSON(200, snapshot) }