summaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorHarshit Bansal <harshitbansal2015@gmail.com>2019-01-01 04:30:54 +0530
committertechknowlogick <hello@techknowlogick.com>2018-12-31 18:00:54 -0500
commit63bd1b92037c5deb1bb13b0753855a689b9450bc (patch)
treec5377c5d3138ad5f32470bf7e389dba39faf0c50 /models
parentb46c2795877c721f738472073ae5b03ecceb6c0a (diff)
downloadgitea-63bd1b92037c5deb1bb13b0753855a689b9450bc.tar.gz
gitea-63bd1b92037c5deb1bb13b0753855a689b9450bc.zip
mirror: Delete tags in mirror which are removed for original repo. (#5609)
This bug was being caused by an error in the logic in `release.go`. Credit to @yasuokav for tracing the root of the issue. Fixes: #5192.
Diffstat (limited to 'models')
-rw-r--r--models/release.go4
-rw-r--r--models/release_test.go55
2 files changed, 57 insertions, 2 deletions
diff --git a/models/release.go b/models/release.go
index c18e152293..c1c8b933d0 100644
--- a/models/release.go
+++ b/models/release.go
@@ -479,10 +479,10 @@ func SyncReleasesWithTags(repo *Repository, gitRepo *git.Repository) error {
continue
}
commitID, err := gitRepo.GetTagCommitID(rel.TagName)
- if err != nil {
+ if err != nil && !git.IsErrNotExist(err) {
return fmt.Errorf("GetTagCommitID: %v", err)
}
- if !gitRepo.IsTagExist(rel.TagName) || commitID != rel.Sha1 {
+ if git.IsErrNotExist(err) || commitID != rel.Sha1 {
if err := pushUpdateDeleteTag(repo, gitRepo, rel.TagName); err != nil {
return fmt.Errorf("pushUpdateDeleteTag: %v", err)
}
diff --git a/models/release_test.go b/models/release_test.go
index de3155f6bd..de34109e8c 100644
--- a/models/release_test.go
+++ b/models/release_test.go
@@ -94,3 +94,58 @@ func TestRelease_Create(t *testing.T) {
IsTag: true,
}, nil))
}
+
+func TestRelease_MirrorDelete(t *testing.T) {
+ assert.NoError(t, PrepareTestDatabase())
+
+ user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
+ repo := AssertExistsAndLoadBean(t, &Repository{ID: 1}).(*Repository)
+ repoPath := RepoPath(user.Name, repo.Name)
+ migrationOptions := MigrateRepoOptions{
+ Name: "test_mirror",
+ Description: "Test mirror",
+ IsPrivate: false,
+ IsMirror: true,
+ RemoteAddr: repoPath,
+ }
+ mirror, err := MigrateRepository(user, user, migrationOptions)
+ assert.NoError(t, err)
+
+ gitRepo, err := git.OpenRepository(repoPath)
+ assert.NoError(t, err)
+
+ findOptions := FindReleasesOptions{IncludeDrafts: true, IncludeTags: true}
+ initCount, err := GetReleaseCountByRepoID(mirror.ID, findOptions)
+ assert.NoError(t, err)
+
+ assert.NoError(t, CreateRelease(gitRepo, &Release{
+ RepoID: repo.ID,
+ PublisherID: user.ID,
+ TagName: "v0.2",
+ Target: "master",
+ Title: "v0.2 is released",
+ Note: "v0.2 is released",
+ IsDraft: false,
+ IsPrerelease: false,
+ IsTag: true,
+ }, nil))
+
+ err = mirror.GetMirror()
+ assert.NoError(t, err)
+
+ _, ok := mirror.Mirror.runSync()
+ assert.True(t, ok)
+
+ count, err := GetReleaseCountByRepoID(mirror.ID, findOptions)
+ assert.EqualValues(t, initCount+1, count)
+
+ release, err := GetRelease(repo.ID, "v0.2")
+ assert.NoError(t, err)
+ assert.NoError(t, DeleteReleaseByID(release.ID, user, true))
+
+ _, ok = mirror.Mirror.runSync()
+ assert.True(t, ok)
+
+ count, err = GetReleaseCountByRepoID(mirror.ID, findOptions)
+ assert.EqualValues(t, initCount, count)
+}