In preparation for appending Link: trailers as 'git notes'. Arrange for a
submission link trailer to be a property of a message object.

Signed-off-by: Dan Williams <[email protected]>
---
 src/b4/__init__.py | 48 ++++++++++++++++++++++++++--------------------
 1 file changed, 27 insertions(+), 21 deletions(-)

diff --git a/src/b4/__init__.py b/src/b4/__init__.py
index ffa7a5d5c7d9..c608a4d7956a 100644
--- a/src/b4/__init__.py
+++ b/src/b4/__init__.py
@@ -715,27 +715,7 @@ class LoreSeries:
             if lmsg is not None:
                 extras = list()
                 if addlink:
-                    linktrailer = None
-                    ltrmask = config.get('linktrailermask')
-                    if ltrmask and isinstance(ltrmask, str):
-                        if ltrmask.find(':'):
-                            lparts = ltrmask.split(':', maxsplit=1)
-                            llname = lparts[0].strip()
-                            llval = lparts[1].strip() % lmsg.msgid
-                            linktrailer = LoreTrailer(name=llname, value=llval)
-                        else:
-                            logger.critical('linktrailermask does not look 
like a valid trailer, using defaults')
-
-                    if not linktrailer:
-                        defmask = LOREADDR + '/r/%s'
-                        cfg_llval = config.get('linkmask', defmask)
-                        if isinstance(cfg_llval, str) and '%s' in cfg_llval:
-                            linktrailer = LoreTrailer(name='Link', 
value=cfg_llval % lmsg.msgid)
-                        else:
-                            logger.critical('linkmask does not look like a 
valid mask, using defaults')
-                            linktrailer = LoreTrailer(name='Link', 
value=defmask % lmsg.msgid)
-
-                    extras.append(linktrailer)
+                    extras.append(lmsg.linktrailer)
 
                 if attsame and not attcrit:
                     if attmark:
@@ -1258,6 +1238,7 @@ class LoreMessage:
         self._git_patch_id: Optional[str] = None
         self._pwhash: Optional[str] = None
         self._blob_indexes: Optional[Set[Tuple[str, str, str, str]]] = None
+        self._linktrailer: Optional[str] = None
 
         # Handle [PATCH 6/5]
         if self.counter > self.expected:
@@ -1399,6 +1380,31 @@ class LoreMessage:
                 self._blob_indexes = set()
         return self._blob_indexes
 
+    @property
+    def linktrailer(self) -> Optional[str]:
+        if self._linktrailer is None:
+            config = get_main_config()
+            ltrmask = config.get('linktrailermask')
+            if ltrmask and isinstance(ltrmask, str):
+                if ltrmask.find(':'):
+                    lparts = ltrmask.split(':', maxsplit=1)
+                    llname = lparts[0].strip()
+                    llval = lparts[1].strip() % self.msgid
+                    self._linktrailer = LoreTrailer(name=llname, value=llval)
+                else:
+                    logger.critical('linktrailermask does not look like a 
valid trailer, using defaults')
+
+            if self._linktrailer is None:
+                defmask = LOREADDR + '/r/%s'
+                cfg_llval = config.get('linkmask', defmask)
+                if isinstance(cfg_llval, str) and '%s' in cfg_llval:
+                    self._linktrailer = LoreTrailer(name='Link', 
value=cfg_llval % self.msgid)
+                else:
+                    logger.critical('linkmask does not look like a valid mask, 
using defaults')
+                    self._linktrailer = LoreTrailer(name='Link', value=defmask 
% self.msgid)
+
+        return self._linktrailer
+
     @property
     def attestors(self) -> List['LoreAttestor']:
         if self._attestors is not None:
-- 
2.51.0


Reply via email to