mirror of
https://github.com/go-gitea/gitea.git
synced 2026-10-22 19:13:57 +09:00
Backport https://github.com/go-gitea/gitea/pull/39869 `PATCH /repos/{owner}/{repo}/milestones/{id}` always overwrote the due date with `due_on`, so a request that only changed other fields, such as `{"state": "closed"}`, silently removed it. The due date is now kept when `due_on` is omitted, and `"due_on": null` or `"due_on": ""` remove it. Only the milestone fix is backported. The issue and pull request deadline changes of https://github.com/go-gitea/gitea/pull/39869 build on https://github.com/go-gitea/gitea/pull/38677, which isn't on v28.
This commit is contained in:
@@ -4,17 +4,28 @@
|
||||
package optional
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
|
||||
"gitea.dev/modules/json"
|
||||
|
||||
"go.yaml.in/yaml/v4"
|
||||
)
|
||||
|
||||
func (o *Option[T]) assignUnmarshalledValue(v *T) {
|
||||
if reflect.TypeFor[T]().Kind() == reflect.Pointer && v == nil {
|
||||
var zero T
|
||||
*o = Some[T](zero)
|
||||
} else {
|
||||
*o = FromPtr(v)
|
||||
}
|
||||
}
|
||||
|
||||
func (o *Option[T]) UnmarshalJSON(data []byte) error {
|
||||
var v *T
|
||||
if err := json.Unmarshal(data, &v); err != nil {
|
||||
return err
|
||||
}
|
||||
*o = FromPtr(v)
|
||||
o.assignUnmarshalledValue(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -31,7 +42,7 @@ func (o *Option[T]) UnmarshalYAML(value *yaml.Node) error {
|
||||
if err := value.Decode(&v); err != nil {
|
||||
return err
|
||||
}
|
||||
*o = FromPtr(v)
|
||||
o.assignUnmarshalledValue(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user