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.
This commit is contained in:
parent
b46c279587
commit
63bd1b9203
2 changed files with 57 additions and 2 deletions
|
@ -479,10 +479,10 @@ func SyncReleasesWithTags(repo *Repository, gitRepo *git.Repository) error {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
commitID, err := gitRepo.GetTagCommitID(rel.TagName)
|
commitID, err := gitRepo.GetTagCommitID(rel.TagName)
|
||||||
if err != nil {
|
if err != nil && !git.IsErrNotExist(err) {
|
||||||
return fmt.Errorf("GetTagCommitID: %v", 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 {
|
if err := pushUpdateDeleteTag(repo, gitRepo, rel.TagName); err != nil {
|
||||||
return fmt.Errorf("pushUpdateDeleteTag: %v", err)
|
return fmt.Errorf("pushUpdateDeleteTag: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,3 +94,58 @@ func TestRelease_Create(t *testing.T) {
|
||||||
IsTag: true,
|
IsTag: true,
|
||||||
}, nil))
|
}, 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)
|
||||||
|
}
|
||||||
|
|
Reference in a new issue