Skip to content

Commit be09984

Browse files
mirror: Delete tags in mirror which are removed for original repo.
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.
1 parent 945804f commit be09984

File tree

2 files changed

+57
-2
lines changed

2 files changed

+57
-2
lines changed

models/release.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -479,10 +479,10 @@ func SyncReleasesWithTags(repo *Repository, gitRepo *git.Repository) error {
479479
continue
480480
}
481481
commitID, err := gitRepo.GetTagCommitID(rel.TagName)
482-
if err != nil {
482+
if err != nil && !git.IsErrNotExist(err) {
483483
return fmt.Errorf("GetTagCommitID: %v", err)
484484
}
485-
if !gitRepo.IsTagExist(rel.TagName) || commitID != rel.Sha1 {
485+
if git.IsErrNotExist(err) || commitID != rel.Sha1 {
486486
if err := pushUpdateDeleteTag(repo, gitRepo, rel.TagName); err != nil {
487487
return fmt.Errorf("pushUpdateDeleteTag: %v", err)
488488
}

models/release_test.go

+55
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,58 @@ func TestRelease_Create(t *testing.T) {
9494
IsTag: true,
9595
}, nil))
9696
}
97+
98+
func TestRelease_MirrorDelete(t *testing.T) {
99+
assert.NoError(t, PrepareTestDatabase())
100+
101+
user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
102+
repo := AssertExistsAndLoadBean(t, &Repository{ID: 1}).(*Repository)
103+
repoPath := RepoPath(user.Name, repo.Name)
104+
migrationOptions := MigrateRepoOptions{
105+
Name: "test_mirror",
106+
Description: "Test mirror",
107+
IsPrivate: false,
108+
IsMirror: true,
109+
RemoteAddr: repoPath,
110+
}
111+
mirror, err := MigrateRepository(user, user, migrationOptions)
112+
assert.NoError(t, err)
113+
114+
gitRepo, err := git.OpenRepository(repoPath)
115+
assert.NoError(t, err)
116+
117+
findOptions := FindReleasesOptions{IncludeDrafts: true, IncludeTags: true}
118+
initCount, err := GetReleaseCountByRepoID(mirror.ID, findOptions)
119+
assert.NoError(t, err)
120+
121+
assert.NoError(t, CreateRelease(gitRepo, &Release{
122+
RepoID: repo.ID,
123+
PublisherID: user.ID,
124+
TagName: "v0.2",
125+
Target: "master",
126+
Title: "v0.2 is released",
127+
Note: "v0.2 is released",
128+
IsDraft: false,
129+
IsPrerelease: false,
130+
IsTag: true,
131+
}, nil))
132+
133+
err = mirror.GetMirror()
134+
assert.NoError(t, err)
135+
136+
_, ok := mirror.Mirror.runSync()
137+
assert.True(t, ok)
138+
139+
count, err := GetReleaseCountByRepoID(mirror.ID, findOptions)
140+
assert.EqualValues(t, initCount+1, count)
141+
142+
release, err := GetRelease(repo.ID, "v0.2")
143+
assert.NoError(t, err)
144+
assert.NoError(t, DeleteReleaseByID(release.ID, user, true))
145+
146+
_, ok = mirror.Mirror.runSync()
147+
assert.True(t, ok)
148+
149+
count, err = GetReleaseCountByRepoID(mirror.ID, findOptions)
150+
assert.EqualValues(t, initCount, count)
151+
}

0 commit comments

Comments
 (0)