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
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 committed Dec 30, 2018
1 parent 945804f commit be09984
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 be09984

Please sign in to comment.