You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The CheckRepoStats function missed the following counters:
* label num_closed_issues & num_closed_pulls
* milestone num_closed_issues & num_closed_pulls
The update SQL statements for updating the repository
num_closed_issues & num_closed_pulls fields were repeated in three
functions (repo.CheckRepoStats, migrate.insertIssues and
models.Issue.updateClosedNum) and were moved to a single helper.
The UpdateRepoStats is implemented and called in the Finish migration method
so that it happens immediately instead of wating for the
CheckRepoStats to run.
Signed-off-by: Loïc Dachary <[email protected]>
_, err:=e.Exec("UPDATE `label` SET num_closed_issues=(SELECT COUNT(*) FROM `issue_label`,`issue` WHERE `issue_label`.label_id=`label`.id AND `issue_label`.issue_id=`issue`.id AND `issue`.is_closed=TRUE) WHERE `label`.id=?", id)
_, err:=e.Exec("UPDATE `label` SET num_closed_issues=(SELECT COUNT(*) FROM `issue_label`,`issue` WHERE `issue_label`.label_id=`label`.id AND `issue_label`.issue_id=`issue`.id AND `issue`.is_closed=TRUE) WHERE `label`.repo_id=?", id)
1020
+
returnerr
1021
+
}
1022
+
1023
+
varmilestoneStatsQueryNumIssues="SELECT `milestone`.id FROM `milestone` WHERE `milestone`.num_closed_issues!=(SELECT COUNT(*) FROM `issue` WHERE `issue`.milestone_id=`milestone`.id AND `issue`.is_closed=TRUE) OR `milestone`.num_issues!=(SELECT COUNT(*) FROM `issue` WHERE `issue`.milestone_id=`milestone`.id)"
_, err:=e.Exec("UPDATE `repository` SET "+field+"=(SELECT COUNT(*) FROM `issue` WHERE repo_id=? AND is_closed=TRUE AND is_pull=?) WHERE id=?", id, isPull, id)
"SELECT repo.id FROM `repository` repo WHERE repo.num_watches!=(SELECT COUNT(*) FROM `watch` WHERE repo_id=repo.id AND mode<>2)",
998
-
"UPDATE `repository` SET num_watches=(SELECT COUNT(*) FROM `watch` WHERE repo_id=? AND mode<>2) WHERE id=?",
1086
+
repoStatsCorrectNumWatches,
999
1087
"repository count 'num_watches'",
1000
1088
},
1001
1089
// Repository.NumStars
1002
1090
{
1003
1091
"SELECT repo.id FROM `repository` repo WHERE repo.num_stars!=(SELECT COUNT(*) FROM `star` WHERE repo_id=repo.id)",
1004
-
"UPDATE `repository` SET num_stars=(SELECT COUNT(*) FROM `star` WHERE repo_id=?) WHERE id=?",
1092
+
repoStatsCorrectNumStars,
1005
1093
"repository count 'num_stars'",
1006
1094
},
1095
+
// Repository.NumClosedIssues
1096
+
{
1097
+
"SELECT repo.id FROM `repository` repo WHERE repo.num_closed_issues!=(SELECT COUNT(*) FROM `issue` WHERE repo_id=repo.id AND is_closed=TRUE AND is_pull=FALSE)",
1098
+
repoStatsCorrectNumClosedIssues,
1099
+
"repository count 'num_closed_issues'",
1100
+
},
1101
+
// Repository.NumClosedPulls
1102
+
{
1103
+
"SELECT repo.id FROM `repository` repo WHERE repo.num_closed_issues!=(SELECT COUNT(*) FROM `issue` WHERE repo_id=repo.id AND is_closed=TRUE AND is_pull=TRUE)",
1104
+
repoStatsCorrectNumClosedPulls,
1105
+
"repository count 'num_closed_pulls'",
1106
+
},
1007
1107
// Label.NumIssues
1008
1108
{
1009
1109
"SELECT label.id FROM `label` WHERE label.num_issues!=(SELECT COUNT(*) FROM `issue_label` WHERE label_id=label.id)",
1010
-
"UPDATE `label` SET num_issues=(SELECT COUNT(*) FROM `issue_label` WHERE label_id=?) WHERE id=?",
1110
+
labelStatsCorrectNumIssues,
1011
1111
"label count 'num_issues'",
1012
1112
},
1113
+
// Label.NumClosedIssues
1114
+
{
1115
+
"SELECT `label`.id FROM `label` WHERE `label`.num_closed_issues!=(SELECT COUNT(*) FROM `issue_label`,`issue` WHERE `issue_label`.label_id=`label`.id AND `issue_label`.issue_id=`issue`.id AND `issue`.is_closed=TRUE)",
1116
+
labelStatsCorrectNumClosedIssues,
1117
+
"label count 'num_closed_issues'",
1118
+
},
1119
+
// Milestone.Num{,Closed}Issues
1120
+
{
1121
+
milestoneStatsQueryNumIssues,
1122
+
milestoneStatsCorrectNumIssues,
1123
+
"milestone count 'num_closed_issues' and 'num_issues'",
1124
+
},
1013
1125
// User.NumRepos
1014
1126
{
1015
1127
"SELECT `user`.id FROM `user` WHERE `user`.num_repos!=(SELECT COUNT(*) FROM `repository` WHERE owner_id=`user`.id)",
1016
-
"UPDATE `user` SET num_repos=(SELECT COUNT(*) FROM `repository` WHERE owner_id=?) WHERE id=?",
1128
+
userStatsCorrectNumRepos,
1017
1129
"user count 'num_repos'",
1018
1130
},
1019
1131
// Issue.NumComments
1020
1132
{
1021
1133
"SELECT `issue`.id FROM `issue` WHERE `issue`.num_comments!=(SELECT COUNT(*) FROM `comment` WHERE issue_id=`issue`.id AND type=0)",
1022
-
"UPDATE `issue` SET num_comments=(SELECT COUNT(*) FROM `comment` WHERE issue_id=? AND type=0) WHERE id=?",
1134
+
repoStatsCorrectIssueNumComments,
1023
1135
"issue count 'num_comments'",
1024
1136
},
1025
1137
}
1138
+
e:=db.GetEngine(db.DefaultContext)
1026
1139
for_, checker:=rangecheckers {
1027
1140
select {
1028
1141
case<-ctx.Done():
1029
1142
log.Warn("CheckRepoStats: Cancelled before %s", checker.desc)
results, err:=db.GetEngine(db.DefaultContext).Query("SELECT repo.id FROM `repository` repo WHERE repo.num_closed_issues!=(SELECT COUNT(*) FROM `issue` WHERE repo_id=repo.id AND is_closed=? AND is_pull=?)", true, false)
log.Warn("CheckRepoStats: Cancelled during %s for repo ID %d", desc, id)
1047
-
returndb.ErrCancelledf("during %s for repo ID %d", desc, id)
1048
-
default:
1049
-
}
1050
-
log.Trace("Updating %s: %d", desc, id)
1051
-
_, err=db.GetEngine(db.DefaultContext).Exec("UPDATE `repository` SET num_closed_issues=(SELECT COUNT(*) FROM `issue` WHERE repo_id=? AND is_closed=? AND is_pull=?) WHERE id=?", id, true, false, id)
1052
-
iferr!=nil {
1053
-
log.Error("Update %s[%d]: %v", desc, id, err)
1054
-
}
1145
+
repoStatsCheck(ctx, e, checker)
1055
1146
}
1056
1147
}
1057
-
// ***** END: Repository.NumClosedIssues *****
1058
-
1059
-
// ***** START: Repository.NumClosedPulls *****
1060
-
desc="repository count 'num_closed_pulls'"
1061
-
results, err=db.GetEngine(db.DefaultContext).Query("SELECT repo.id FROM `repository` repo WHERE repo.num_closed_pulls!=(SELECT COUNT(*) FROM `issue` WHERE repo_id=repo.id AND is_closed=? AND is_pull=?)", true, true)
returndb.ErrCancelledf("during %s for repo ID %d", desc, id)
1071
-
default:
1072
-
}
1073
-
log.Trace("Updating %s: %d", desc, id)
1074
-
_, err=db.GetEngine(db.DefaultContext).Exec("UPDATE `repository` SET num_closed_pulls=(SELECT COUNT(*) FROM `issue` WHERE repo_id=? AND is_closed=? AND is_pull=?) WHERE id=?", id, true, true, id)
1075
-
iferr!=nil {
1076
-
log.Error("Update %s[%d]: %v", desc, id, err)
1077
-
}
1078
-
}
1079
-
}
1080
-
// ***** END: Repository.NumClosedPulls *****
1081
1148
1082
1149
// FIXME: use checker when stop supporting old fork repo format.
1083
1150
// ***** START: Repository.NumForks *****
1084
-
results, err=db.GetEngine(db.DefaultContext).Query("SELECT repo.id FROM `repository` repo WHERE repo.num_forks!=(SELECT COUNT(*) FROM `repository` WHERE fork_id=repo.id)")
1151
+
results, err:=e.Query("SELECT repo.id FROM `repository` repo WHERE repo.num_forks!=(SELECT COUNT(*) FROM `repository` WHERE fork_id=repo.id)")
0 commit comments