summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Svantesson <davidsvantesson@gmail.com>2019-11-03 15:46:32 +0100
committerLunny Xiao <xiaolunwen@gmail.com>2019-11-03 22:46:32 +0800
commit7971b05d2b96e45a4ee3954a39a7db9b9bbb807f (patch)
treef46d38c064c5372e6d3b813568096bef402421fb
parentdce22efbee6a04b8c19348dac831cd88b18ac07c (diff)
downloadgitea-7971b05d2b96e45a4ee3954a39a7db9b9bbb807f.tar.gz
gitea-7971b05d2b96e45a4ee3954a39a7db9b9bbb807f.zip
Fix API deadline removal (#8759)
* Handle deadline is zero (to remove deadline) * Better API documentation for issue deadline. * Add parameter to unset due date. * Update pull edit API comment
-rw-r--r--go.mod2
-rw-r--r--modules/structs/issue.go3
-rw-r--r--modules/structs/pull.go3
-rw-r--r--routers/api/v1/repo/issue.go13
-rw-r--r--routers/api/v1/repo/pull.go15
-rw-r--r--templates/swagger/v1_json.tmpl10
6 files changed, 34 insertions, 12 deletions
diff --git a/go.mod b/go.mod
index 7e920ac032..02f0c46f22 100644
--- a/go.mod
+++ b/go.mod
@@ -69,8 +69,6 @@ require (
github.com/mattn/go-sqlite3 v1.11.0
github.com/mcuadros/go-version v0.0.0-20190308113854-92cdf37c5b75
github.com/microcosm-cc/bluemonday v0.0.0-20161012083705-f77f16ffc87a
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
- github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae // indirect
github.com/msteinert/pam v0.0.0-20151204160544-02ccfbfaf0cc
github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5
diff --git a/modules/structs/issue.go b/modules/structs/issue.go
index bd39f9ea44..b27c757faa 100644
--- a/modules/structs/issue.go
+++ b/modules/structs/issue.go
@@ -99,7 +99,8 @@ type EditIssueOption struct {
Milestone *int64 `json:"milestone"`
State *string `json:"state"`
// swagger:strfmt date-time
- Deadline *time.Time `json:"due_date"`
+ Deadline *time.Time `json:"due_date"`
+ RemoveDeadline *bool `json:"unset_due_date"`
}
// EditDeadlineOption options for creating a deadline
diff --git a/modules/structs/pull.go b/modules/structs/pull.go
index 722d245afc..c4ec7d416a 100644
--- a/modules/structs/pull.go
+++ b/modules/structs/pull.go
@@ -88,5 +88,6 @@ type EditPullRequestOption struct {
Labels []int64 `json:"labels"`
State *string `json:"state"`
// swagger:strfmt date-time
- Deadline *time.Time `json:"due_date"`
+ Deadline *time.Time `json:"due_date"`
+ RemoveDeadline *bool `json:"unset_due_date"`
}
diff --git a/routers/api/v1/repo/issue.go b/routers/api/v1/repo/issue.go
index 1534c45df0..186e66cb8f 100644
--- a/routers/api/v1/repo/issue.go
+++ b/routers/api/v1/repo/issue.go
@@ -458,9 +458,16 @@ func EditIssue(ctx *context.APIContext, form api.EditIssueOption) {
issue.Content = *form.Body
}
- // Update the deadline
- if form.Deadline != nil && ctx.Repo.CanWrite(models.UnitTypeIssues) {
- deadlineUnix := timeutil.TimeStamp(form.Deadline.Unix())
+ // Update or remove the deadline, only if set and allowed
+ if (form.Deadline != nil || form.RemoveDeadline != nil) && ctx.Repo.CanWrite(models.UnitTypeIssues) {
+ var deadlineUnix timeutil.TimeStamp
+
+ if (form.RemoveDeadline == nil || !*form.RemoveDeadline) && !form.Deadline.IsZero() {
+ deadline := time.Date(form.Deadline.Year(), form.Deadline.Month(), form.Deadline.Day(),
+ 23, 59, 59, 0, form.Deadline.Location())
+ deadlineUnix = timeutil.TimeStamp(deadline.Unix())
+ }
+
if err := models.UpdateIssueDeadline(issue, deadlineUnix, ctx.User); err != nil {
ctx.Error(500, "UpdateIssueDeadline", err)
return
diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go
index 9264c00cec..6d86105a15 100644
--- a/routers/api/v1/repo/pull.go
+++ b/routers/api/v1/repo/pull.go
@@ -8,6 +8,7 @@ import (
"fmt"
"net/http"
"strings"
+ "time"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/auth"
@@ -326,7 +327,7 @@ func CreatePullRequest(ctx *context.APIContext, form api.CreatePullRequestOption
func EditPullRequest(ctx *context.APIContext, form api.EditPullRequestOption) {
// swagger:operation PATCH /repos/{owner}/{repo}/pulls/{index} repository repoEditPullRequest
// ---
- // summary: Update a pull request
+ // summary: Update a pull request. If using deadline only the date will be taken into account, and time of day ignored.
// consumes:
// - application/json
// produces:
@@ -385,9 +386,15 @@ func EditPullRequest(ctx *context.APIContext, form api.EditPullRequestOption) {
issue.Content = form.Body
}
- // Update Deadline
- if form.Deadline != nil {
- deadlineUnix := timeutil.TimeStamp(form.Deadline.Unix())
+ // Update or remove deadline if set
+ if form.Deadline != nil || form.RemoveDeadline != nil {
+ var deadlineUnix timeutil.TimeStamp
+ if (form.RemoveDeadline == nil || !*form.RemoveDeadline) && !form.Deadline.IsZero() {
+ deadline := time.Date(form.Deadline.Year(), form.Deadline.Month(), form.Deadline.Day(),
+ 23, 59, 59, 0, form.Deadline.Location())
+ deadlineUnix = timeutil.TimeStamp(deadline.Unix())
+ }
+
if err := models.UpdateIssueDeadline(issue, deadlineUnix, ctx.User); err != nil {
ctx.Error(500, "UpdateIssueDeadline", err)
return
diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl
index 41e5353ea7..17b8eab6c5 100644
--- a/templates/swagger/v1_json.tmpl
+++ b/templates/swagger/v1_json.tmpl
@@ -4715,7 +4715,7 @@
"tags": [
"repository"
],
- "summary": "Update a pull request",
+ "summary": "Update a pull request. If using deadline only the date will be taken into account, and time of day ignored.",
"operationId": "repoEditPullRequest",
"parameters": [
{
@@ -8532,6 +8532,10 @@
"title": {
"type": "string",
"x-go-name": "Title"
+ },
+ "unset_due_date": {
+ "type": "boolean",
+ "x-go-name": "RemoveDeadline"
}
},
"x-go-package": "code.gitea.io/gitea/modules/structs"
@@ -8660,6 +8664,10 @@
"title": {
"type": "string",
"x-go-name": "Title"
+ },
+ "unset_due_date": {
+ "type": "boolean",
+ "x-go-name": "RemoveDeadline"
}
},
"x-go-package": "code.gitea.io/gitea/modules/structs"