From cfe0bb6bb61fd395f3c09c8e9ed49307bb6a8e3e Mon Sep 17 00:00:00 2001 From: Blake Mizerany Date: Thu, 4 Apr 2024 15:03:54 -0700 Subject: [PATCH] x/model: clarify Merge semantics --- x/model/name.go | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/x/model/name.go b/x/model/name.go index df501957..cfd7d0c3 100644 --- a/x/model/name.go +++ b/x/model/name.go @@ -175,19 +175,21 @@ func ParseName(s string) Name { return r } -// Merge folds the domain, namespace, tag, and build of b into a if not set. -// The name is left untouched. +// Merge performs a partial merge of dst into src. Only the non-name parts +// are merged. The name part is always left untouched. Other parts are +// merged if and only if they are missing in dst. // -// Use this for merging a ref with a default ref. -func Merge(a, b Name) Name { +// Use this for merging a fully qualified ref with a partial ref, such as +// when filling in a missing parts with defaults. +func Merge(dst, src Name) Name { return Name{ // name is left untouched - nick: a.nick, + nick: dst.nick, - domain: cmp.Or(a.domain, b.domain), - namespace: cmp.Or(a.namespace, b.namespace), - tag: cmp.Or(a.tag, b.tag), - build: cmp.Or(a.build, b.build), + domain: cmp.Or(dst.domain, src.domain), + namespace: cmp.Or(dst.namespace, src.namespace), + tag: cmp.Or(dst.tag, src.tag), + build: cmp.Or(dst.build, src.build), } }