4
4
"context"
5
5
"errors"
6
6
"fmt"
7
+ "log"
7
8
"strconv"
8
9
"strings"
9
10
@@ -34,10 +35,11 @@ const (
34
35
repoAllowRebase string = "allow_rebase"
35
36
repoAllowRebaseMerge string = "allow_rebase_explicit"
36
37
repoAllowSquash string = "allow_squash_merge"
37
- repoAchived string = "archived"
38
+ repoArchived string = "archived"
38
39
repoAllowManualMerge string = "allow_manual_merge"
39
40
repoAutodetectManualMerge string = "autodetect_manual_merge"
40
41
repoMirror string = "mirror"
42
+ repoArchiveOnDestroy string = "archive_on_destroy"
41
43
migrationCloneAddresse string = "migration_clone_addresse"
42
44
migrationCloneAddress string = "migration_clone_address"
43
45
migrationService string = "migration_service"
@@ -253,7 +255,7 @@ func resourceRepoUpdate(d *schema.ResourceData, meta interface{}) (err error) {
253
255
var mirrorInterval string = d .Get (migrationMirrorInterval ).(string )
254
256
opts .MirrorInterval = & mirrorInterval
255
257
} else {
256
- var archived bool = d .Get (repoAchived ).(bool )
258
+ var archived bool = d .Get (repoArchived ).(bool )
257
259
opts .Archived = & archived
258
260
}
259
261
@@ -268,12 +270,83 @@ func resourceRepoUpdate(d *schema.ResourceData, meta interface{}) (err error) {
268
270
269
271
}
270
272
271
- func respurceRepoDelete (d * schema.ResourceData , meta interface {}) (err error ) {
273
+ func resourceRepoDelete (d * schema.ResourceData , meta interface {}) (err error ) {
272
274
client := meta .(* gitea.Client )
273
275
274
- client .DeleteRepo (d .Get (repoOwner ).(string ), d .Get (repoName ).(string ))
276
+ archiveOnDestroy := d .Get (repoArchiveOnDestroy ).(bool )
277
+ archived := d .Get (repoArchived ).(bool )
278
+ owner := d .Get (repoOwner ).(string )
279
+ name := d .Get (repoName ).(string )
275
280
276
- return
281
+ if archiveOnDestroy {
282
+ if archived {
283
+ log .Printf ("[DEBUG] Repository already archived, nothing to do on delete: %s/%s" , owner , name )
284
+ err = nil
285
+ return err
286
+ } else {
287
+ log .Printf ("[DEBUG] Archiving repository on delete: %s/%s" , owner , name )
288
+ err = archiveRepo (d , client )
289
+ return err
290
+ }
291
+ } else {
292
+ log .Printf ("[DEBUG] Deleting repository: %s/%s" , owner , repoName )
293
+ err = deleteRepo (d , client )
294
+ return err
295
+ }
296
+ }
297
+
298
+ func archiveRepo (d * schema.ResourceData , client * gitea.Client ) (err error ) {
299
+ if err := d .Set ("archived" , true ); err != nil {
300
+ return err
301
+ }
302
+
303
+ var name string = d .Get (repoName ).(string )
304
+ var description string = d .Get (repoDescription ).(string )
305
+ var website string = d .Get (repoWebsite ).(string )
306
+ var private bool = d .Get (repoPrivateFlag ).(bool )
307
+ var template bool = d .Get (repoTemplate ).(bool )
308
+ var hasIssues bool = d .Get (repoIssues ).(bool )
309
+ var hasWiki bool = d .Get (repoWiki ).(bool )
310
+ var defaultBranch string = d .Get (repoDefaultBranch ).(string )
311
+ var hasPRs bool = d .Get (repoPrs ).(bool )
312
+ var hasProjects bool = d .Get (repoProjects ).(bool )
313
+ var ignoreWhitespaceConflicts bool = d .Get (repoIgnoreWhitespace ).(bool )
314
+ var allowMerge bool = d .Get (repoAllowMerge ).(bool )
315
+ var allowRebase bool = d .Get (repoAllowRebase ).(bool )
316
+ var allowRebaseMerge bool = d .Get (repoAllowRebaseMerge ).(bool )
317
+ var allowSquash bool = d .Get (repoAllowSquash ).(bool )
318
+ var allowManualMerge bool = d .Get (repoAllowManualMerge ).(bool )
319
+ var autodetectManualMerge bool = d .Get (repoAutodetectManualMerge ).(bool )
320
+ var archived bool = d .Get (repoArchived ).(bool )
321
+
322
+ opts := gitea.EditRepoOption {
323
+ Name : & name ,
324
+ Description : & description ,
325
+ Website : & website ,
326
+ Private : & private ,
327
+ Template : & template ,
328
+ HasIssues : & hasIssues ,
329
+ HasWiki : & hasWiki ,
330
+ DefaultBranch : & defaultBranch ,
331
+ HasPullRequests : & hasPRs ,
332
+ HasProjects : & hasProjects ,
333
+ IgnoreWhitespaceConflicts : & ignoreWhitespaceConflicts ,
334
+ AllowMerge : & allowMerge ,
335
+ AllowRebase : & allowRebase ,
336
+ AllowRebaseMerge : & allowRebaseMerge ,
337
+ AllowSquash : & allowSquash ,
338
+ AllowManualMerge : & allowManualMerge ,
339
+ AutodetectManualMerge : & autodetectManualMerge ,
340
+ Archived : & archived ,
341
+ }
342
+
343
+ _ , _ , err = client .EditRepo (d .Get (repoOwner ).(string ), d .Get (repoName ).(string ), opts )
344
+ return err
345
+ }
346
+
347
+ func deleteRepo (d * schema.ResourceData , client * gitea.Client ) (err error ) {
348
+ _ , err = client .DeleteRepo (d .Get (repoOwner ).(string ), d .Get (repoName ).(string ))
349
+ return err
277
350
}
278
351
279
352
func setRepoResourceData (repo * gitea.Repository , d * schema.ResourceData ) (err error ) {
@@ -309,7 +382,7 @@ func resourceGiteaRepository() *schema.Resource {
309
382
Read : resourceRepoRead ,
310
383
Create : resourceRepoCreate ,
311
384
Update : resourceRepoUpdate ,
312
- Delete : respurceRepoDelete ,
385
+ Delete : resourceRepoDelete ,
313
386
Importer : & schema.ResourceImporter {
314
387
StateContext : schema .ImportStatePassthroughContext ,
315
388
},
@@ -482,6 +555,13 @@ func resourceGiteaRepository() *schema.Resource {
482
555
Optional : true ,
483
556
Default : false ,
484
557
},
558
+ "archive_on_destroy" : {
559
+ Type : schema .TypeBool ,
560
+ Required : false ,
561
+ Optional : true ,
562
+ Default : false ,
563
+ Description : "Set to 'true' to archive the repository instead of deleting on destroy." ,
564
+ },
485
565
"allow_manual_merge" : {
486
566
Type : schema .TypeBool ,
487
567
Required : false ,
0 commit comments