From 0bacdc75f2b246ada306bf256ed6821b51fe0c6c Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Fri, 22 Oct 2021 12:39:36 +0200 Subject: [PATCH] Allow clients to pick a specific referenceID Related to #260 --- pkg/api/core/types/repository.go | 2 ++ pkg/installer/repository.go | 20 +++++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/pkg/api/core/types/repository.go b/pkg/api/core/types/repository.go index f08beb9c..d1af80f8 100644 --- a/pkg/api/core/types/repository.go +++ b/pkg/api/core/types/repository.go @@ -37,6 +37,8 @@ type LuetRepository struct { Verify bool `json:"verify,omitempty" yaml:"verify,omitempty" mapstructure:"verify"` Arch string `json:"arch,omitempty" yaml:"arch,omitempty" mapstructure:"arch"` + ReferenceID string `json:"reference,omitempty" yaml:"reference,omitempty" mapstructure:"reference"` + // Incremented value that identify revision of the repository in a user-friendly way. Revision int `json:"revision,omitempty" yaml:"-" mapstructure:"-"` // Epoch time in seconds diff --git a/pkg/installer/repository.go b/pkg/installer/repository.go index 278db4ba..f7d77459 100644 --- a/pkg/installer/repository.go +++ b/pkg/installer/repository.go @@ -772,6 +772,14 @@ func (r *LuetSystemRepository) SyncBuildMetadata(ctx *types.Context, path string return nil } +func (r *LuetSystemRepository) referenceID() string { + repositoryReferenceID := REPOSITORY_SPECFILE + if r.ReferenceID != "" { + repositoryReferenceID = r.ReferenceID + } + return repositoryReferenceID +} + func (r *LuetSystemRepository) Sync(ctx *types.Context, force bool) (*LuetSystemRepository, error) { var repoUpdated bool = false var treefs, metafs string @@ -782,10 +790,12 @@ func (r *LuetSystemRepository) Sync(ctx *types.Context, force bool) (*LuetSystem return nil, errors.New("no client could be generated from repository") } + repositoryReferenceID := r.referenceID() + // Retrieve remote repository.yaml for retrieve revision and date - file, err := c.DownloadFile(REPOSITORY_SPECFILE) + file, err := c.DownloadFile(repositoryReferenceID) if err != nil { - return nil, errors.Wrap(err, "while downloading "+REPOSITORY_SPECFILE) + return nil, errors.Wrap(err, "while downloading "+repositoryReferenceID) } repobasedir := ctx.Config.GetSystem().GetRepoDatabaseDirPath(r.GetName()) @@ -799,7 +809,7 @@ func (r *LuetSystemRepository) Sync(ctx *types.Context, force bool) (*LuetSystem if r.Cached { if !force { - localRepo, _ := r.ReadSpecFile(filepath.Join(repobasedir, REPOSITORY_SPECFILE)) + localRepo, _ := r.ReadSpecFile(filepath.Join(repobasedir, repositoryReferenceID)) if localRepo != nil { if localRepo.GetRevision() == downloadedRepoMeta.GetRevision() && localRepo.GetLastUpdate() == downloadedRepoMeta.GetLastUpdate() { @@ -850,9 +860,9 @@ func (r *LuetSystemRepository) Sync(ctx *types.Context, force bool) (*LuetSystem if r.Cached { // Copy updated repository.yaml file to repo dir now that the tree is synced. - err = fileHelper.CopyFile(file, filepath.Join(repobasedir, REPOSITORY_SPECFILE)) + err = fileHelper.CopyFile(file, filepath.Join(repobasedir, repositoryReferenceID)) if err != nil { - return nil, errors.Wrap(err, "Error on update "+REPOSITORY_SPECFILE) + return nil, errors.Wrap(err, "Error on update "+repositoryReferenceID) } // Remove previous tree os.RemoveAll(treefs)