aboutsummaryrefslogtreecommitdiffstats
path: root/models/issues/tracked_time.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/issues/tracked_time.go')
-rw-r--r--models/issues/tracked_time.go151
1 files changed, 65 insertions, 86 deletions
diff --git a/models/issues/tracked_time.go b/models/issues/tracked_time.go
index ea404d36cd..9c11881e44 100644
--- a/models/issues/tracked_time.go
+++ b/models/issues/tracked_time.go
@@ -168,35 +168,31 @@ func GetTrackedSeconds(ctx context.Context, opts FindTrackedTimesOptions) (track
// AddTime will add the given time (in seconds) to the issue
func AddTime(ctx context.Context, user *user_model.User, issue *Issue, amount int64, created time.Time) (*TrackedTime, error) {
- ctx, committer, err := db.TxContext(ctx)
- if err != nil {
- return nil, err
- }
- defer committer.Close()
-
- t, err := addTime(ctx, user, issue, amount, created)
- if err != nil {
- return nil, err
- }
+ return db.WithTx2(ctx, func(ctx context.Context) (*TrackedTime, error) {
+ t, err := addTime(ctx, user, issue, amount, created)
+ if err != nil {
+ return nil, err
+ }
- if err := issue.LoadRepo(ctx); err != nil {
- return nil, err
- }
+ if err := issue.LoadRepo(ctx); err != nil {
+ return nil, err
+ }
- if _, err := CreateComment(ctx, &CreateCommentOptions{
- Issue: issue,
- Repo: issue.Repo,
- Doer: user,
- // Content before v1.21 did store the formatted string instead of seconds,
- // so use "|" as delimiter to mark the new format
- Content: fmt.Sprintf("|%d", amount),
- Type: CommentTypeAddTimeManual,
- TimeID: t.ID,
- }); err != nil {
- return nil, err
- }
+ if _, err := CreateComment(ctx, &CreateCommentOptions{
+ Issue: issue,
+ Repo: issue.Repo,
+ Doer: user,
+ // Content before v1.21 did store the formatted string instead of seconds,
+ // so use "|" as delimiter to mark the new format
+ Content: fmt.Sprintf("|%d", amount),
+ Type: CommentTypeAddTimeManual,
+ TimeID: t.ID,
+ }); err != nil {
+ return nil, err
+ }
- return t, committer.Commit()
+ return t, nil
+ })
}
func addTime(ctx context.Context, user *user_model.User, issue *Issue, amount int64, created time.Time) (*TrackedTime, error) {
@@ -241,72 +237,58 @@ func TotalTimesForEachUser(ctx context.Context, options *FindTrackedTimesOptions
// DeleteIssueUserTimes deletes times for issue
func DeleteIssueUserTimes(ctx context.Context, issue *Issue, user *user_model.User) error {
- ctx, committer, err := db.TxContext(ctx)
- if err != nil {
- return err
- }
- defer committer.Close()
-
- opts := FindTrackedTimesOptions{
- IssueID: issue.ID,
- UserID: user.ID,
- }
+ return db.WithTx(ctx, func(ctx context.Context) error {
+ opts := FindTrackedTimesOptions{
+ IssueID: issue.ID,
+ UserID: user.ID,
+ }
- removedTime, err := deleteTimes(ctx, opts)
- if err != nil {
- return err
- }
- if removedTime == 0 {
- return db.ErrNotExist{Resource: "tracked_time"}
- }
+ removedTime, err := deleteTimes(ctx, opts)
+ if err != nil {
+ return err
+ }
+ if removedTime == 0 {
+ return db.ErrNotExist{Resource: "tracked_time"}
+ }
- if err := issue.LoadRepo(ctx); err != nil {
- return err
- }
- if _, err := CreateComment(ctx, &CreateCommentOptions{
- Issue: issue,
- Repo: issue.Repo,
- Doer: user,
- // Content before v1.21 did store the formatted string instead of seconds,
- // so use "|" as delimiter to mark the new format
- Content: fmt.Sprintf("|%d", removedTime),
- Type: CommentTypeDeleteTimeManual,
- }); err != nil {
+ if err := issue.LoadRepo(ctx); err != nil {
+ return err
+ }
+ _, err = CreateComment(ctx, &CreateCommentOptions{
+ Issue: issue,
+ Repo: issue.Repo,
+ Doer: user,
+ // Content before v1.21 did store the formatted string instead of seconds,
+ // so use "|" as delimiter to mark the new format
+ Content: fmt.Sprintf("|%d", removedTime),
+ Type: CommentTypeDeleteTimeManual,
+ })
return err
- }
-
- return committer.Commit()
+ })
}
// DeleteTime delete a specific Time
func DeleteTime(ctx context.Context, t *TrackedTime) error {
- ctx, committer, err := db.TxContext(ctx)
- if err != nil {
- return err
- }
- defer committer.Close()
-
- if err := t.LoadAttributes(ctx); err != nil {
- return err
- }
+ return db.WithTx(ctx, func(ctx context.Context) error {
+ if err := t.LoadAttributes(ctx); err != nil {
+ return err
+ }
- if err := deleteTime(ctx, t); err != nil {
- return err
- }
+ if err := deleteTime(ctx, t); err != nil {
+ return err
+ }
- if _, err := CreateComment(ctx, &CreateCommentOptions{
- Issue: t.Issue,
- Repo: t.Issue.Repo,
- Doer: t.User,
- // Content before v1.21 did store the formatted string instead of seconds,
- // so use "|" as delimiter to mark the new format
- Content: fmt.Sprintf("|%d", t.Time),
- Type: CommentTypeDeleteTimeManual,
- }); err != nil {
+ _, err := CreateComment(ctx, &CreateCommentOptions{
+ Issue: t.Issue,
+ Repo: t.Issue.Repo,
+ Doer: t.User,
+ // Content before v1.21 did store the formatted string instead of seconds,
+ // so use "|" as delimiter to mark the new format
+ Content: fmt.Sprintf("|%d", t.Time),
+ Type: CommentTypeDeleteTimeManual,
+ })
return err
- }
-
- return committer.Commit()
+ })
}
func deleteTimes(ctx context.Context, opts FindTrackedTimesOptions) (removedTime int64, err error) {
@@ -350,10 +332,7 @@ func GetIssueTotalTrackedTime(ctx context.Context, opts *IssuesOptions, isClosed
// we get the statistics in smaller chunks and get accumulates
var accum int64
for i := 0; i < len(opts.IssueIDs); {
- chunk := i + MaxQueryParameters
- if chunk > len(opts.IssueIDs) {
- chunk = len(opts.IssueIDs)
- }
+ chunk := min(i+MaxQueryParameters, len(opts.IssueIDs))
time, err := getIssueTotalTrackedTimeChunk(ctx, opts, isClosed, opts.IssueIDs[i:chunk])
if err != nil {
return 0, err