New upstream version 1.1.1

This commit is contained in:
Sébastien Delafond
2017-11-02 08:56:43 +01:00
parent c926f2bf05
commit ee9fb8dfec
356 changed files with 656439 additions and 643115 deletions
+28 -23
View File
@@ -23,11 +23,18 @@ func apiVersion(c *gin.Context) {
c.JSON(200, gin.H{"Version": aptly.Version})
}
type dbRequestKind int
const (
acquiredb = iota
acquiredb dbRequestKind = iota
releasedb
)
type dbRequest struct {
kind dbRequestKind
err chan<- error
}
// Flushes all collections which cache in-memory objects
func flushColections() {
// lock everything to eliminate in-progress calls
@@ -52,50 +59,48 @@ func flushColections() {
}
// Periodically flushes CollectionFactory to free up memory used by
// collections, flushing caches. If the two channels are provided,
// they are used to acquire and release the database.
// collections, flushing caches.
//
// Should be run in goroutine!
func cacheFlusher(requests chan int, acks chan error) {
func cacheFlusher() {
ticker := time.Tick(15 * time.Minute)
for {
<-ticker
// if aptly API runs in -no-lock mode,
// caches are flushed when DB is closed anyway, no need
// to flush them here
if requests == nil {
flushColections()
}
flushColections()
}
}
// Acquire database lock and release it when not needed anymore. Two
// channels must be provided. The first one is to receive requests to
// acquire/release the database and the second one is to send acks.
// Acquire database lock and release it when not needed anymore.
//
// Should be run in a goroutine!
func acquireDatabase(requests chan int, acks chan error) {
func acquireDatabase(requests <-chan dbRequest) {
clients := 0
for {
request := <-requests
switch request {
for request := range requests {
var err error
switch request.kind {
case acquiredb:
if clients == 0 {
acks <- context.ReOpenDatabase()
} else {
acks <- nil
err = context.ReOpenDatabase()
}
request.err <- err
if err == nil {
clients++
}
clients++
case releasedb:
clients--
if clients == 0 {
flushColections()
acks <- context.CloseDatabase()
err = context.CloseDatabase()
} else {
acks <- nil
err = nil
}
request.err <- err
}
}
}
+28 -17
View File
@@ -6,6 +6,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/smira/aptly/deb"
"github.com/smira/aptly/pgp"
"github.com/smira/aptly/utils"
)
@@ -20,12 +21,12 @@ type SigningOptions struct {
PassphraseFile string
}
func getSigner(options *SigningOptions) (utils.Signer, error) {
func getSigner(options *SigningOptions) (pgp.Signer, error) {
if options.Skip {
return nil, nil
}
signer := &utils.GpgSigner{}
signer := context.GetSigner()
signer.SetKey(options.GpgKey)
signer.SetKeyRing(options.Keyring, options.SecretKeyring)
signer.SetPassphrase(options.Passphrase, options.PassphraseFile)
@@ -94,13 +95,15 @@ func apiPublishRepoOrSnapshot(c *gin.Context) {
Component string
Name string `binding:"required"`
} `binding:"required"`
Distribution string
Label string
Origin string
ForceOverwrite bool
SkipContents *bool
Architectures []string
Signing SigningOptions
Distribution string
Label string
Origin string
NotAutomatic string
ButAutomaticUpgrades string
ForceOverwrite bool
SkipContents *bool
Architectures []string
Signing SigningOptions
}
if !c.Bind(&b) {
@@ -145,7 +148,7 @@ func apiPublishRepoOrSnapshot(c *gin.Context) {
sources = append(sources, snapshot)
}
} else if b.SourceKind == "local" {
} else if b.SourceKind == deb.SourceLocalRepo {
var localRepo *deb.LocalRepo
localCollection := context.CollectionFactory().LocalRepoCollection()
@@ -182,7 +185,15 @@ func apiPublishRepoOrSnapshot(c *gin.Context) {
c.Fail(500, fmt.Errorf("unable to publish: %s", err))
return
}
published.Origin = b.Origin
if b.Origin != "" {
published.Origin = b.Origin
}
if b.NotAutomatic != "" {
published.NotAutomatic = b.NotAutomatic
}
if b.ButAutomaticUpgrades != "" {
published.ButAutomaticUpgrades = b.ButAutomaticUpgrades
}
published.Label = b.Label
published.SkipContents = context.Config().SkipContentsPublishing
@@ -264,7 +275,7 @@ func apiPublishUpdateSwitch(c *gin.Context) {
var updatedComponents []string
if published.SourceKind == "local" {
if published.SourceKind == deb.SourceLocalRepo {
if len(b.Snapshots) > 0 {
c.Fail(400, fmt.Errorf("snapshots shouldn't be given when updating local repo"))
return
@@ -281,15 +292,15 @@ func apiPublishUpdateSwitch(c *gin.Context) {
return
}
snapshot, err := snapshotCollection.ByName(snapshotInfo.Name)
snapshot, err2 := snapshotCollection.ByName(snapshotInfo.Name)
if err != nil {
c.Fail(404, err)
c.Fail(404, err2)
return
}
err = snapshotCollection.LoadComplete(snapshot)
if err != nil {
c.Fail(500, err)
err2 = snapshotCollection.LoadComplete(snapshot)
if err2 != nil {
c.Fail(500, err2)
return
}
+2 -2
View File
@@ -296,7 +296,7 @@ func apiReposPackageFromDir(c *gin.Context) {
return
}
verifier := &utils.GpgVerifier{}
verifier := context.GetVerifier()
var (
sources []string
@@ -325,7 +325,7 @@ func apiReposPackageFromDir(c *gin.Context) {
}
processedFiles, failedFiles2, err = deb.ImportPackageFiles(list, packageFiles, forceReplace, verifier, context.PackagePool(),
context.CollectionFactory().PackageCollection(), reporter, nil)
context.CollectionFactory().PackageCollection(), reporter, nil, context.CollectionFactory().ChecksumCollection())
failedFiles = append(failedFiles, failedFiles2...)
if err != nil {
+13 -10
View File
@@ -20,32 +20,35 @@ func Router(c *ctx.AptlyContext) http.Handler {
// We use a goroutine to count the number of
// concurrent requests. When no more requests are
// running, we close the database to free the lock.
requests := make(chan int)
acks := make(chan error)
requests := make(chan dbRequest)
go acquireDatabase(requests, acks)
go cacheFlusher(requests, acks)
go acquireDatabase(requests)
router.Use(func(c *gin.Context) {
requests <- acquiredb
err := <-acks
var err error
errCh := make(chan error)
requests <- dbRequest{acquiredb, errCh}
err = <-errCh
if err != nil {
c.Fail(500, err)
return
}
defer func() {
requests <- releasedb
err = <-acks
requests <- dbRequest{releasedb, errCh}
err = <-errCh
if err != nil {
c.Fail(500, err)
return
}
}()
c.Next()
})
} else {
go cacheFlusher(nil, nil)
go cacheFlusher()
}
root := router.Group("/api")