@@ -28,7 +28,6 @@ import (
2828 "github.com/go-git/go-git/v5/plumbing/transport"
2929 "github.com/go-logr/logr"
3030 corev1 "k8s.io/api/core/v1"
31- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3231 "k8s.io/apimachinery/pkg/runtime"
3332 "k8s.io/apimachinery/pkg/types"
3433 kuberecorder "k8s.io/client-go/tools/record"
@@ -100,13 +99,7 @@ func (r *GitRepositoryReconciler) Reconcile(req ctrl.Request) (ctrl.Result, erro
10099 }
101100
102101 // set initial status
103- if reset , status := r .shouldResetStatus (repository ); reset {
104- repository .Status = status
105- if err := r .Status ().Update (ctx , & repository ); err != nil {
106- log .Error (err , "unable to update status" )
107- return ctrl.Result {Requeue : true }, err
108- }
109- } else {
102+ if repository .Generation == 0 || repository .GetArtifact () != nil && ! r .Storage .ArtifactExist (* repository .GetArtifact ()) {
110103 repository = sourcev1 .GitRepositoryProgressing (repository )
111104 if err := r .Status ().Update (ctx , & repository ); err != nil {
112105 log .Error (err , "unable to update status" )
@@ -202,6 +195,12 @@ func (r *GitRepositoryReconciler) reconcile(ctx context.Context, repository sour
202195 return sourcev1 .GitRepositoryNotReady (repository , sourcev1 .GitOperationFailedReason , err .Error ()), err
203196 }
204197
198+ // return early on unchanged revision
199+ artifact := r .Storage .NewArtifactFor (repository .Kind , repository .GetObjectMeta (), revision , fmt .Sprintf ("%s.tar.gz" , commit .Hash .String ()))
200+ if repository .GetArtifact () != nil && repository .GetArtifact ().Revision == revision {
201+ return repository , nil
202+ }
203+
205204 // verify PGP signature
206205 if repository .Spec .Verification != nil {
207206 err := r .verify (ctx , types.NamespacedName {
@@ -213,11 +212,6 @@ func (r *GitRepositoryReconciler) reconcile(ctx context.Context, repository sour
213212 }
214213 }
215214
216- // TODO(hidde): implement checksum when https://github.com/fluxcd/source-controller/pull/133
217- // has been merged.
218- artifact := r .Storage .ArtifactFor (repository .Kind , repository .ObjectMeta .GetObjectMeta (),
219- fmt .Sprintf ("%s.tar.gz" , commit .Hash .String ()), revision , "" )
220-
221215 // create artifact dir
222216 err = r .Storage .MkdirAll (artifact )
223217 if err != nil {
@@ -234,7 +228,7 @@ func (r *GitRepositoryReconciler) reconcile(ctx context.Context, repository sour
234228 defer unlock ()
235229
236230 // archive artifact and check integrity
237- if err := r .Storage .Archive (artifact , tmpGit , repository .Spec ); err != nil {
231+ if err := r .Storage .Archive (& artifact , tmpGit , repository .Spec ); err != nil {
238232 err = fmt .Errorf ("storage archive error: %w" , err )
239233 return sourcev1 .GitRepositoryNotReady (repository , sourcev1 .StorageOperationFailedReason , err .Error ()), err
240234 }
@@ -250,32 +244,6 @@ func (r *GitRepositoryReconciler) reconcile(ctx context.Context, repository sour
250244 return sourcev1 .GitRepositoryReady (repository , artifact , url , sourcev1 .GitOperationSucceedReason , message ), nil
251245}
252246
253- // shouldResetStatus returns a boolean indicating if the status of the
254- // given repository should be reset.
255- func (r * GitRepositoryReconciler ) shouldResetStatus (repository sourcev1.GitRepository ) (bool , sourcev1.GitRepositoryStatus ) {
256- resetStatus := false
257- if repository .Status .Artifact != nil {
258- if ! r .Storage .ArtifactExist (* repository .Status .Artifact ) {
259- resetStatus = true
260- }
261- }
262-
263- if len (repository .Status .Conditions ) == 0 || resetStatus {
264- resetStatus = true
265- }
266-
267- return resetStatus , sourcev1.GitRepositoryStatus {
268- Conditions : []sourcev1.SourceCondition {
269- {
270- Type : sourcev1 .ReadyCondition ,
271- Status : corev1 .ConditionUnknown ,
272- Reason : sourcev1 .InitializingReason ,
273- LastTransitionTime : metav1 .Now (),
274- },
275- },
276- }
277- }
278-
279247// verify returns an error if the PGP signature can't be verified
280248func (r * GitRepositoryReconciler ) verify (ctx context.Context , publicKeySecret types.NamespacedName , commit * object.Commit ) error {
281249 if commit .PGPSignature == "" {
@@ -304,10 +272,10 @@ func (r *GitRepositoryReconciler) verify(ctx context.Context, publicKeySecret ty
304272// the given repository.
305273func (r * GitRepositoryReconciler ) gc (repository sourcev1.GitRepository , all bool ) error {
306274 if all {
307- return r .Storage .RemoveAll (r .Storage .ArtifactFor (repository .Kind , repository .GetObjectMeta (), "" , "" , "" ))
275+ return r .Storage .RemoveAll (r .Storage .NewArtifactFor (repository .Kind , repository .GetObjectMeta (), "" , "" ))
308276 }
309- if repository .Status . Artifact != nil {
310- return r .Storage .RemoveAllButCurrent (* repository .Status . Artifact )
277+ if repository .GetArtifact () != nil {
278+ return r .Storage .RemoveAllButCurrent (* repository .GetArtifact () )
311279 }
312280 return nil
313281}
0 commit comments