mirror of
https://github.com/fleetdm/fleet
synced 2026-04-21 21:47:20 +00:00
<!-- Add the related story/sub-task/bug number, like Resolves #123, or remove if NA --> **Related issue:** Resolves #43273 # Checklist for submitter If some of the following don't apply, delete the relevant line. - [X] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. See [Changes files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files) for more information. ## Testing - [X] Added/updated automated tests - Added new test for this case (policies without software automation being pushed by two different users), verified it fails on main and passes on this branch - [X] QA'd all new/changed functionality manually - [X] Verified that changing `webhooks_and_tickets_enabled` on a policy AND running gitops as another user doesn't wipe stats - [X] Verified that changing `query` on a policy and running gitops does wipe stats - [X] Verified that changing `query` on a policy and running gitops does wipe stats <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Fixed an issue where policy stats were incorrectly reset during GitOps policy updates. Policy statistics now remain accurate when policies are re-applied without modification to installation or script configurations. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
116 lines
2.3 KiB
Go
116 lines
2.3 KiB
Go
// Package ptr includes functions for creating pointers from values.
|
|
package ptr
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
)
|
|
|
|
// String returns a pointer to the provided string.
|
|
func String(x string) *string {
|
|
val := new(string)
|
|
*val = x
|
|
return val
|
|
}
|
|
|
|
// Int returns a pointer to the provided int.
|
|
func Int(x int) *int {
|
|
return &x
|
|
}
|
|
|
|
// Uint returns a pointer to the provided uint.
|
|
func Uint(x uint) *uint {
|
|
return &x
|
|
}
|
|
|
|
// UintOrNilIfZero returns nil if the supplied value is zero, else a pointer to the provided uint.
|
|
// This is useful for cases that expect nil to be supplied for "No team" instead of zero, and allows for
|
|
// a quick way to sidestep e.g. https://github.com/fleetdm/fleet/issues/37729 (which ptr.Uint() would cause).
|
|
func UintOrNilIfZero(x uint) *uint {
|
|
if x > 0 {
|
|
return &x
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Bool returns a pointer to the provided bool.
|
|
func Bool(x bool) *bool {
|
|
return &x
|
|
}
|
|
|
|
// BoolPtr returns a double pointer to the provided bool.
|
|
func BoolPtr(x bool) **bool {
|
|
p := Bool(x)
|
|
return &p
|
|
}
|
|
|
|
func StringPtr(x string) **string {
|
|
p := String(x)
|
|
return &p
|
|
}
|
|
|
|
// Time returns a pointer to the provided time.Time.
|
|
func Time(x time.Time) *time.Time {
|
|
val := new(time.Time)
|
|
*val = x
|
|
return val
|
|
}
|
|
|
|
// TimePtr returns a *time.Time Pointer (**time.Time) for the provided time.
|
|
func TimePtr(x time.Time) **time.Time {
|
|
t := Time(x)
|
|
return &t
|
|
}
|
|
|
|
// RawMessage returns a pointer to the provided json.RawMessage.
|
|
func RawMessage(x json.RawMessage) *json.RawMessage {
|
|
return &x
|
|
}
|
|
|
|
// Float64 returns a pointer to a float64.
|
|
func Float64(x float64) *float64 {
|
|
return &x
|
|
}
|
|
|
|
// Float64Ptr returns a pointer to a *float64.
|
|
func Float64Ptr(x float64) **float64 {
|
|
p := Float64(x)
|
|
return &p
|
|
}
|
|
|
|
func Int64(x int64) *int64 {
|
|
return &x
|
|
}
|
|
|
|
func Duration(x time.Duration) *time.Duration {
|
|
return &x
|
|
}
|
|
|
|
// T is the generic version to get the pointer of any type.
|
|
func T[T any](x T) *T {
|
|
return &x
|
|
}
|
|
|
|
// Equal returns true if both pointers are nil, or both are non-nil and
|
|
// point to equal values.
|
|
func Equal[T comparable](a, b *T) bool {
|
|
if a == nil && b == nil {
|
|
return true
|
|
}
|
|
if a == nil || b == nil {
|
|
return false
|
|
}
|
|
return *a == *b
|
|
}
|
|
|
|
// ValOrZero returns the value of x if x is not nil, and the zero value
|
|
// for T otherwise.
|
|
func ValOrZero[T any](x *T) T {
|
|
var ret T
|
|
|
|
if x != nil {
|
|
return *x
|
|
}
|
|
|
|
return ret
|
|
}
|