Skip to content

Commit

Permalink
mirror: Delete tags in mirror which are removed for original repo. (#…
Browse files Browse the repository at this point in the history
…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.
  • Loading branch information
HarshitOnGitHub authored and techknowlogick committed Dec 31, 2018
1 parent b46c279 commit 63bd1b9
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 2 deletions.
4 changes: 2 additions & 2 deletions models/release.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
55 changes: 55 additions & 0 deletions models/release_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

0 comments on commit 63bd1b9

Please sign in to comment.