Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package kubectl-klock for openSUSE:Factory 
checked in at 2026-05-29 18:07:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kubectl-klock (Old)
 and      /work/SRC/openSUSE:Factory/.kubectl-klock.new.1937 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kubectl-klock"

Fri May 29 18:07:55 2026 rev:6 rq:1355765 version:0.9.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/kubectl-klock/kubectl-klock.changes      
2026-04-25 21:35:54.338195081 +0200
+++ /work/SRC/openSUSE:Factory/.kubectl-klock.new.1937/kubectl-klock.changes    
2026-05-29 18:09:44.376921633 +0200
@@ -1,0 +2,27 @@
+Fri May 29 05:56:10 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 0.9.1:
+  * Fixes
+    - fix: add mutex to table.Model to prevent concurrent access
+      panic (#227)
+  * Updates
+    - Bump k8s.io/cli-runtime from 0.36.0 to 0.36.1 (#234)
+    - Bump k8s.io/kubectl from 0.36.0 to 0.36.1 (#235)
+    - Bump k8s.io/client-go from 0.36.0 to 0.36.1 (#237)
+    - Bump zizmorcore/zizmor-action from 0.5.3 to 0.5.5 in the all
+      group (#238)
+    - Bump github.com/fsnotify/fsnotify from 1.10.0 to 1.10.1
+      (#231)
+    - Bump github.com/gookit/color from 1.6.0 to 1.6.1 (#232)
+    - Bump github/codeql-action from 4.35.2 to 4.35.4 in the all
+      group (#233)
+    - Update golang.org/x/net v0.51.0 -> v0.54.0 (#230)
+    - Bump goreleaser/goreleaser-action from 7.1.0 to 7.2.1 in the
+      all group (#229)
+    - Bump github.com/fsnotify/fsnotify from 1.9.0 to 1.10.0 (#228)
+    - Bump k8s.io/kubectl from 0.35.4 to 0.36.0 (#224)
+    - Bump k8s.io/apimachinery from 0.35.4 to 0.36.0 (#225)
+    - Bump goreleaser/goreleaser-action from 7.0.0 to 7.1.0 in the
+      all group (#226)
+
+-------------------------------------------------------------------

Old:
----
  kubectl-klock-0.9.0.obscpio

New:
----
  kubectl-klock-0.9.1.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kubectl-klock.spec ++++++
--- /var/tmp/diff_new_pack.9VsVrP/_old  2026-05-29 18:09:47.669059003 +0200
+++ /var/tmp/diff_new_pack.9VsVrP/_new  2026-05-29 18:09:47.673059170 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           kubectl-klock
-Version:        0.9.0
+Version:        0.9.1
 Release:        0
 Summary:        Kubectl plugin to render watch output in a more readable 
fashion
 License:        Apache-2.0 AND GPL-3.0-or-later AND CC-BY-4.0 AND CC0-1.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.9VsVrP/_old  2026-05-29 18:09:47.745062175 +0200
+++ /var/tmp/diff_new_pack.9VsVrP/_new  2026-05-29 18:09:47.749062341 +0200
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/applejag/kubectl-klock.git</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">v0.9.0</param>
+    <param name="revision">refs/tags/v0.9.1</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.9VsVrP/_old  2026-05-29 18:09:47.793064177 +0200
+++ /var/tmp/diff_new_pack.9VsVrP/_new  2026-05-29 18:09:47.805064678 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/applejag/kubectl-klock.git</param>
-              <param 
name="changesrevision">bea45b953405a1fbfbe43a98ba01fe81d607de78</param></service></servicedata>
+              <param 
name="changesrevision">6506dad4cbf87eed4da486037b9bc73bd82b5b87</param></service></servicedata>
 (No newline at EOF)
 

++++++ kubectl-klock-0.9.0.obscpio -> kubectl-klock-0.9.1.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubectl-klock-0.9.0/go.mod 
new/kubectl-klock-0.9.1/go.mod
--- old/kubectl-klock-0.9.0/go.mod      2026-04-23 16:58:29.000000000 +0200
+++ new/kubectl-klock-0.9.1/go.mod      2026-05-28 13:16:03.000000000 +0200
@@ -10,8 +10,8 @@
        github.com/charmbracelet/bubbles v1.0.0
        github.com/charmbracelet/bubbletea v1.3.10
        github.com/charmbracelet/lipgloss v1.1.0
-       github.com/fsnotify/fsnotify v1.9.0
-       github.com/gookit/color v1.6.0
+       github.com/fsnotify/fsnotify v1.10.1
+       github.com/gookit/color v1.6.1
        github.com/knadh/koanf/providers/env v1.1.0
        github.com/knadh/koanf/providers/posflag v1.0.1
        github.com/knadh/koanf/v2 v2.3.4
@@ -20,10 +20,10 @@
        github.com/muesli/reflow v0.3.0
        github.com/spf13/cobra v1.10.2
        github.com/spf13/pflag v1.0.10
-       k8s.io/apimachinery v0.35.4
-       k8s.io/cli-runtime v0.35.4
-       k8s.io/client-go v0.35.4
-       k8s.io/kubectl v0.35.4
+       k8s.io/apimachinery v0.36.1
+       k8s.io/cli-runtime v0.36.1
+       k8s.io/client-go v0.36.1
+       k8s.io/kubectl v0.36.1
 )
 
 require (
@@ -64,9 +64,7 @@
        github.com/go-viper/mapstructure/v2 v2.5.0 // indirect
        github.com/google/btree v1.1.3 // indirect
        github.com/google/gnostic-models v0.7.1 // indirect
-       github.com/google/go-cmp v0.7.0 // indirect
        github.com/google/uuid v1.6.0 // indirect
-       github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // 
indirect
        github.com/inconshreveable/mousetrap v1.1.0 // indirect
        github.com/json-iterator/go v1.1.12 // indirect
        github.com/knadh/koanf/maps v0.1.2 // indirect
@@ -89,7 +87,7 @@
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // 
indirect
        github.com/pelletier/go-toml/v2 v2.2.4 // indirect
        github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // 
indirect
        github.com/rivo/uniseg v0.4.7 // indirect
        github.com/russross/blackfriday/v2 v2.1.0 // indirect
        github.com/sagikazarmark/locafero v0.12.0 // indirect
@@ -103,22 +101,22 @@
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
        golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect
-       golang.org/x/net v0.51.0 // indirect
+       golang.org/x/net v0.54.0 // indirect
        golang.org/x/oauth2 v0.35.0 // indirect
-       golang.org/x/sync v0.19.0 // indirect
-       golang.org/x/sys v0.41.0 // indirect
-       golang.org/x/term v0.40.0 // indirect
-       golang.org/x/text v0.34.0 // indirect
+       golang.org/x/sync v0.20.0 // indirect
+       golang.org/x/sys v0.44.0 // indirect
+       golang.org/x/term v0.43.0 // indirect
+       golang.org/x/text v0.37.0 // indirect
        golang.org/x/time v0.14.0 // indirect
-       google.golang.org/protobuf v1.36.11 // indirect
+       google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af // 
indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
-       k8s.io/api v0.35.4 // indirect
-       k8s.io/component-base v0.35.4 // indirect
-       k8s.io/component-helpers v0.35.4 // indirect
-       k8s.io/klog/v2 v2.130.1 // indirect
-       k8s.io/kube-openapi v0.0.0-20260304202019-5b3e3fdb0acf // indirect
+       k8s.io/api v0.36.1 // indirect
+       k8s.io/component-base v0.36.1 // indirect
+       k8s.io/component-helpers v0.36.1 // indirect
+       k8s.io/klog/v2 v2.140.0 // indirect
+       k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a // indirect
        k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2 // indirect
        sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
        sigs.k8s.io/kustomize/api v0.21.1 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubectl-klock-0.9.0/go.sum 
new/kubectl-klock-0.9.1/go.sum
--- old/kubectl-klock-0.9.0/go.sum      2026-04-23 16:58:29.000000000 +0200
+++ new/kubectl-klock-0.9.1/go.sum      2026-05-28 13:16:03.000000000 +0200
@@ -51,8 +51,8 @@
 github.com/fatih/camelcase v1.0.0/go.mod 
h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
 github.com/frankban/quicktest v1.14.6 
h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
 github.com/frankban/quicktest v1.14.6/go.mod 
h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
-github.com/fsnotify/fsnotify v1.9.0 
h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
-github.com/fsnotify/fsnotify v1.9.0/go.mod 
h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
+github.com/fsnotify/fsnotify v1.10.1 
h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho=
+github.com/fsnotify/fsnotify v1.10.1/go.mod 
h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo=
 github.com/fxamacker/cbor/v2 v2.9.0 
h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
 github.com/fxamacker/cbor/v2 v2.9.0/go.mod 
h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
 github.com/go-errors/errors v1.5.1 
h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk=
@@ -104,16 +104,14 @@
 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
 github.com/google/go-cmp v0.7.0/go.mod 
h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
 github.com/google/gofuzz v1.0.0/go.mod 
h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 
h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8=
-github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod 
h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
+github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83 
h1:z2ogiKUYzX5Is6zr/vP9vJGqPwcdqsWjOt+V8J7+bTc=
+github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83/go.mod 
h1:MxpfABSjhmINe3F1It9d+8exIHFvUqtLIRCdOGNXqiI=
 github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
 github.com/google/uuid v1.6.0/go.mod 
h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/gookit/assert v0.1.1 h1:lh3GcawXe/p+cU7ESTZ5Ui3Sm/x8JWpIis4/1aF0mY0=
 github.com/gookit/assert v0.1.1/go.mod 
h1:jS5bmIVQZTIwk42uXl4lyj4iaaxx32tqH16CFj0VX2E=
-github.com/gookit/color v1.6.0 h1:JjJXBTk1ETNyqyilJhkTXJYYigHG24TM9Xa2M1xAhRA=
-github.com/gookit/color v1.6.0/go.mod 
h1:9ACFc7/1IpHGBW8RwuDm/0YEnhg3dwwXpoMsmtyHfjs=
-github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 
h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA=
-github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod 
h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
+github.com/gookit/color v1.6.1 h1:KoTnDxJPRgrL0SoX0f8rCFg2zI0t4E3GZZBMo2nN8LU=
+github.com/gookit/color v1.6.1/go.mod 
h1:9ACFc7/1IpHGBW8RwuDm/0YEnhg3dwwXpoMsmtyHfjs=
 github.com/inconshreveable/mousetrap v1.1.0 
h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
 github.com/inconshreveable/mousetrap v1.1.0/go.mod 
h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
 github.com/json-iterator/go v1.1.12 
h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@@ -175,16 +173,17 @@
 github.com/muesli/termenv v0.16.0/go.mod 
h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 
h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod 
h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/onsi/ginkgo/v2 v2.27.2 
h1:LzwLj0b89qtIy6SSASkzlNvX6WktqurSHwkk2ipF/Ns=
-github.com/onsi/ginkgo/v2 v2.27.2/go.mod 
h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo=
-github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A=
-github.com/onsi/gomega v1.38.2/go.mod 
h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k=
+github.com/onsi/ginkgo/v2 v2.28.1 
h1:S4hj+HbZp40fNKuLUQOYLDgZLwNUVn19N3Atb98NCyI=
+github.com/onsi/ginkgo/v2 v2.28.1/go.mod 
h1:CLtbVInNckU3/+gC8LzkGUb9oF+e8W8TdUsxPwvdOgE=
+github.com/onsi/gomega v1.39.1 h1:1IJLAad4zjPn2PsnhH70V4DKRFlrCzGBNrNaru+Vf28=
+github.com/onsi/gomega v1.39.1/go.mod 
h1:hL6yVALoTOxeWudERyfppUcZXjMwIMLnuSfruD2lcfg=
 github.com/pelletier/go-toml/v2 v2.2.4 
h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
 github.com/pelletier/go-toml/v2 v2.2.4/go.mod 
h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
 github.com/peterbourgon/diskv v2.0.1+incompatible 
h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod 
h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
-github.com/pmezard/go-difflib v1.0.0 
h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod 
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 
h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod 
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rivo/uniseg v0.1.0/go.mod 
h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
 github.com/rivo/uniseg v0.2.0/go.mod 
h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
 github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
@@ -232,29 +231,29 @@
 go.yaml.in/yaml/v3 v3.0.4/go.mod 
h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
 golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 
h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM=
 golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod 
h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc=
-golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c=
-golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU=
-golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo=
-golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y=
+golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM=
+golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU=
+golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w=
+golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ=
 golang.org/x/oauth2 v0.35.0 h1:Mv2mzuHuZuY2+bkyWXIHMfhNdJAdwW3FuWeCPYN5GVQ=
 golang.org/x/oauth2 v0.35.0/go.mod 
h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
-golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
-golang.org/x/sync v0.19.0/go.mod 
h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
+golang.org/x/sync v0.20.0/go.mod 
h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
 golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k=
-golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg=
-golang.org/x/term v0.40.0/go.mod 
h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM=
-golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk=
-golang.org/x/text v0.34.0/go.mod 
h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA=
+golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
+golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
+golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
+golang.org/x/term v0.43.0/go.mod 
h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
+golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
+golang.org/x/text v0.37.0/go.mod 
h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
 golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
 golang.org/x/time v0.14.0/go.mod 
h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
-golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc=
-golang.org/x/tools v0.41.0/go.mod 
h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg=
-google.golang.org/protobuf v1.36.11 
h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
-google.golang.org/protobuf v1.36.11/go.mod 
h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
+golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
+golang.org/x/tools v0.44.0/go.mod 
h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
+google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af 
h1:+5/Sw3GsDNlEmu7TfklWKPdQ0Ykja5VEmq2i817+jbI=
+google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af/go.mod 
h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c 
h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod 
h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
@@ -265,24 +264,24 @@
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-k8s.io/api v0.35.4 h1:P7nFYKl5vo9AGUp1Z+Pmd3p2tA7bX2wbFWCvDeRv988=
-k8s.io/api v0.35.4/go.mod h1:yl4lqySWOgYJJf9RERXKUwE9g2y+CkuwG+xmcOK8wXU=
-k8s.io/apimachinery v0.35.4 h1:xtdom9RG7e+yDp71uoXoJDWEE2eOiHgeO4GdBzwWpds=
-k8s.io/apimachinery v0.35.4/go.mod 
h1:NNi1taPOpep0jOj+oRha3mBJPqvi0hGdaV8TCqGQ+cc=
-k8s.io/cli-runtime v0.35.4 h1:8QRCXSDvopflFNM65Vkkdv42BljPdRSiqf6HFyI1iik=
-k8s.io/cli-runtime v0.35.4/go.mod 
h1:MKLFuZxiJpm87UxjVeQRNy3sCaczHrSOPKN9pinlrM0=
-k8s.io/client-go v0.35.4 h1:DN6fyaGuzK64UvnKO5fOA6ymSjvfGAnCAHAR0C66kD8=
-k8s.io/client-go v0.35.4/go.mod h1:2Pg9WpsS4NeOpoYTfHHfMxBG8zFMSAUi4O/qoiJC3nY=
-k8s.io/component-base v0.35.4 h1:6n1tNJ87johN0Hif0Fs8K2GMthsaUwMqCebUDLYyv7U=
-k8s.io/component-base v0.35.4/go.mod 
h1:qaDJgz5c1KYKla9occFmlJEfPpkuA55s90G509R+PeY=
-k8s.io/component-helpers v0.35.4 
h1:WJM/+fAeeJTAqxPDxgH0aB0q7t8DP+AbV5WkRkOoxYA=
-k8s.io/component-helpers v0.35.4/go.mod 
h1:mE7X9mnMQEX6IbZejdMlWvCx3EPVt1/9PhH/FW0XHDI=
-k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
-k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20260304202019-5b3e3fdb0acf 
h1:btPscg4cMql0XdYK2jLsJcNEKmACJz8l+U7geC06FiM=
-k8s.io/kube-openapi v0.0.0-20260304202019-5b3e3fdb0acf/go.mod 
h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ=
-k8s.io/kubectl v0.35.4 h1:IHitney6OUeH29rBQnt6Cas6az8HpFeSAohormITNMc=
-k8s.io/kubectl v0.35.4/go.mod h1:CGWAaof9ae4vGDAyhnSf1bSQN/U7jiWQHLVbMbLMjRI=
+k8s.io/api v0.36.1 h1:XbL/EMj8K2aJpJtePmqUyQMsM0D4QI2pvl7YKJ20FTY=
+k8s.io/api v0.36.1/go.mod h1:KOWo4ey3TINlXjeHVuwB3i+tXXnu+UcwFBHlI/9dvEo=
+k8s.io/apimachinery v0.36.1 h1:G63Gjx2W+q0YD+72Vo8oY0nDnePVwnuzTmmy5ENrVSA=
+k8s.io/apimachinery v0.36.1/go.mod 
h1:ibYOR00vW/I1kzvi5SF0dRuJ52BvKtfvRdOn35GPQ+8=
+k8s.io/cli-runtime v0.36.1 h1:yuC/BGnnj1YYPh6D1P+pZnzinCs6DvMq86yAeNqoqzM=
+k8s.io/cli-runtime v0.36.1/go.mod 
h1:ZQWHGt8xAF7KnviB79vX0lYNyUUqKIpU+LQg7exuFAw=
+k8s.io/client-go v0.36.1 h1:FN/K8QIT2CEDt+2WB2HnWrUANZ50AP5GII43/SP2JR0=
+k8s.io/client-go v0.36.1/go.mod h1:s6rAnCtTGYDQnpNjEhSaISV+2O8jwruZ6m3QOYBFbtU=
+k8s.io/component-base v0.36.1 h1:iG6GsELftXqTNG9HG6kiVjatSgAw1sf5pJ6R5a6N0kA=
+k8s.io/component-base v0.36.1/go.mod 
h1:nf9XPlntRdqO6WMeEWAA5F93Y4ICZQdeT9GeqLDB3JI=
+k8s.io/component-helpers v0.36.1 
h1:BTrr5fzNSm8TkQfXrKT3N9ioWwiC4n2FTIwGTUo/ccg=
+k8s.io/component-helpers v0.36.1/go.mod 
h1:s38HnzKQRurbUnhI5IV8GwyL/a3lVuNCYZMTd+rITMM=
+k8s.io/klog/v2 v2.140.0 h1:Tf+J3AH7xnUzZyVVXhTgGhEKnFqye14aadWv7bzXdzc=
+k8s.io/klog/v2 v2.140.0/go.mod h1:o+/RWfJ6PwpnFn7OyAG3QnO47BFsymfEfrz6XyYSSp0=
+k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a 
h1:xCeOEAOoGYl2jnJoHkC3hkbPJgdATINPMAxaynU2Ovg=
+k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a/go.mod 
h1:uGBT7iTA6c6MvqUvSXIaYZo9ukscABYi2btjhvgKGZ0=
+k8s.io/kubectl v0.36.1 h1:96HqS9twIdHM0MlJLTwbo14b9kUKPkOzZ4tlRDLv4qI=
+k8s.io/kubectl v0.36.1/go.mod h1:/DGPAIewKsFWF9VFgGvkPhao2Ev4SNuE3BioZo8yPbk=
 k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2 
h1:AZYQSJemyQB5eRxqcPky+/7EdBj0xi3g0ZcxxJ7vbWU=
 k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2/go.mod 
h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=
 sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 
h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubectl-klock-0.9.0/mise.toml 
new/kubectl-klock-0.9.1/mise.toml
--- old/kubectl-klock-0.9.0/mise.toml   1970-01-01 01:00:00.000000000 +0100
+++ new/kubectl-klock-0.9.1/mise.toml   2026-05-28 13:16:03.000000000 +0200
@@ -0,0 +1,6 @@
+# SPDX-FileCopyrightText: 2023 Kalle Fagerberg
+#
+# SPDX-License-Identifier: CC0-1.0
+
+[tools]
+go = "1.26.3"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubectl-klock-0.9.0/pkg/table/keys.go 
new/kubectl-klock-0.9.1/pkg/table/keys.go
--- old/kubectl-klock-0.9.0/pkg/table/keys.go   2026-04-23 16:58:29.000000000 
+0200
+++ new/kubectl-klock-0.9.1/pkg/table/keys.go   2026-05-28 13:16:03.000000000 
+0200
@@ -129,7 +129,7 @@
 
 // FullHelp returns bindings to show the full help view. It's part of the
 // help.KeyMap interface.
-func (m Model) FullHelp() [][]key.Binding {
+func (m *Model) FullHelp() [][]key.Binding {
        browsingBindings := [][]key.Binding{{
                m.KeyMap.NextPage,
                m.KeyMap.PrevPage,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubectl-klock-0.9.0/pkg/table/race_test.go 
new/kubectl-klock-0.9.1/pkg/table/race_test.go
--- old/kubectl-klock-0.9.0/pkg/table/race_test.go      1970-01-01 
01:00:00.000000000 +0100
+++ new/kubectl-klock-0.9.1/pkg/table/race_test.go      2026-05-28 
13:16:03.000000000 +0200
@@ -0,0 +1,133 @@
+// SPDX-FileCopyrightText: 2025 Kalle Fagerberg
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+// This program is free software: you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+// more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+package table
+
+import (
+       "fmt"
+       "sync"
+       "testing"
+       "time"
+)
+
+// TestRace_AddRowWhileUpdate reproduces the data race between the Kubernetes
+// watch goroutine calling AddRow and the bubbletea event loop calling Update
+// (on TickMsg) and View concurrently.
+//
+// This is the root cause of 
https://github.com/applejag/kubectl-klock/issues/161
+//
+// Run with: go test -race -run TestRace_AddRowWhileUpdate -count=1 
./pkg/table/
+func TestRace_AddRowWhileUpdate(t *testing.T) {
+       m := New()
+       m.SetHeaders([]string{"NAME", "READY", "STATUS", "RESTARTS", "AGE"})
+
+       // Pre-populate some rows so the TickMsg handler has something to 
iterate
+       for i := 0; i < 10; i++ {
+               m.AddRow(Row{
+                       ID:     fmt.Sprintf("uid-%d", i),
+                       Fields: []any{fmt.Sprintf("pod-%d", i), "1/1", 
"Running", "0", time.Now()},
+               })
+       }
+
+       const (
+               numWriters  = 3
+               numUpdates  = 200
+               numAddRows  = 200
+       )
+
+       var wg sync.WaitGroup
+
+       // Simulate the Kubernetes watch goroutine: call AddRow, SetHeaders,
+       // SetError, SetRows, StartSpinner, StopSpinner concurrently.
+       // This is what happens in klock.go watch() and pipeEvents().
+       for w := 0; w < numWriters; w++ {
+               wg.Add(1)
+               go func(writerID int) {
+                       defer wg.Done()
+                       for i := 0; i < numAddRows; i++ {
+                               uid := fmt.Sprintf("uid-%d-%d", writerID, i)
+                               row := Row{
+                                       ID:     uid,
+                                       Fields: []any{fmt.Sprintf("pod-%d-%d", 
writerID, i), "1/1", "Running", "0", time.Now()},
+                               }
+                               m.AddRow(row)
+
+                               // Also exercise the other methods called from 
background goroutines
+                               if i%50 == 0 {
+                                       m.SetHeaders([]string{"NAME", "READY", 
"STATUS", "RESTARTS", "AGE"})
+                               }
+                               if i%70 == 0 {
+                                       m.SetError(fmt.Errorf("transient error 
%d", i))
+                               }
+                               if i%71 == 0 {
+                                       m.SetError(nil)
+                               }
+                               if i%100 == 0 {
+                                       m.StopSpinner()
+                               }
+                       }
+               }(w)
+       }
+
+       // Simulate the bubbletea event loop: call Update(TickMsg) and View()
+       // concurrently with the AddRow goroutines above.
+       wg.Add(1)
+       go func() {
+               defer wg.Done()
+               for i := 0; i < numUpdates; i++ {
+                       m.Update(TickMsg(time.Now()))
+                       _ = m.View()
+               }
+       }()
+
+       wg.Wait()
+}
+
+// TestRace_SetRowsWhileView reproduces the race between Clear/SetRows
+// (called from klock.go watch() on restart) and View (bubbletea event loop).
+func TestRace_SetRowsWhileView(t *testing.T) {
+       m := New()
+       m.SetHeaders([]string{"NAME", "STATUS"})
+
+       var wg sync.WaitGroup
+
+       wg.Add(1)
+       go func() {
+               defer wg.Done()
+               for i := 0; i < 200; i++ {
+                       rows := make([]Row, 5)
+                       for j := range rows {
+                               rows[j] = Row{
+                                       ID:     fmt.Sprintf("uid-%d-%d", i, j),
+                                       Fields: []any{fmt.Sprintf("pod-%d-%d", 
i, j), "Running"},
+                               }
+                       }
+                       m.SetRows(rows)
+               }
+       }()
+
+       wg.Add(1)
+       go func() {
+               defer wg.Done()
+               for i := 0; i < 200; i++ {
+                       m.Update(TickMsg(time.Now()))
+                       _ = m.View()
+               }
+       }()
+
+       wg.Wait()
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubectl-klock-0.9.0/pkg/table/table.go 
new/kubectl-klock-0.9.1/pkg/table/table.go
--- old/kubectl-klock-0.9.0/pkg/table/table.go  2026-04-23 16:58:29.000000000 
+0200
+++ new/kubectl-klock-0.9.1/pkg/table/table.go  2026-05-28 13:16:03.000000000 
+0200
@@ -23,6 +23,7 @@
        "fmt"
        "slices"
        "strings"
+       "sync"
        "time"
 
        "github.com/applejag/kubectl-klock/internal/util"
@@ -102,6 +103,14 @@
        filterInput textinput.Model
        showSpinner bool
 
+       // mu protects all mutable state below (and the fields above that are
+       // written after construction) from concurrent access.  The Kubernetes
+       // watch goroutine calls 
AddRow/SetRows/SetHeaders/SetError/StartSpinner/
+       // StopSpinner while the bubbletea event loop calls Update/View on the
+       // main goroutine.
+       // See: https://github.com/applejag/kubectl-klock/issues/161
+       mu sync.Mutex
+
        err                 error
        headers             []string
        maxHeight           int
@@ -135,6 +144,12 @@
 }
 
 func (m *Model) RowIndex(id string) int {
+       m.mu.Lock()
+       defer m.mu.Unlock()
+       return m.rowIndex(id)
+}
+
+func (m *Model) rowIndex(id string) int {
        for i, row := range m.rows {
                if row.ID == id {
                        return i
@@ -144,7 +159,9 @@
 }
 
 func (m *Model) AddRow(row Row) tea.Cmd {
-       index := m.RowIndex(row.ID)
+       m.mu.Lock()
+       defer m.mu.Unlock()
+       index := m.rowIndex(row.ID)
        if index == -1 {
                m.rows = append(m.rows, row)
        } else {
@@ -152,17 +169,19 @@
        }
 
        m.sortItems()
-       m.StopSpinner()
+       m.stopSpinner()
        m.updateRows()
        fullscreenCmd := m.updateFullscreenCmd()
        return fullscreenCmd
 }
 
 func (m *Model) SetRows(rows []Row) tea.Cmd {
+       m.mu.Lock()
+       defer m.mu.Unlock()
        m.rows = slices.Clone(rows)
        m.sortItems()
        if len(m.rows) > 0 {
-               m.StopSpinner()
+               m.stopSpinner()
        }
        m.updateRows()
        return m.updateFullscreenCmd()
@@ -222,6 +241,8 @@
 }
 
 func (m *Model) SetError(err error) {
+       m.mu.Lock()
+       defer m.mu.Unlock()
        m.err = err
 }
 
@@ -264,7 +285,7 @@
        }
 }
 
-func (m Model) Init() tea.Cmd {
+func (m *Model) Init() tea.Cmd {
        cmd := doTick()
        if m.showSpinner {
                cmd = tea.Batch(cmd, m.spinner.Tick)
@@ -273,6 +294,8 @@
 }
 
 func (m *Model) SetHeaders(headers []string) {
+       m.mu.Lock()
+       defer m.mu.Unlock()
        m.headers = headers
        m.updateColumnWidths()
 }
@@ -286,6 +309,12 @@
 }
 
 func (m *Model) StartSpinner() tea.Cmd {
+       m.mu.Lock()
+       defer m.mu.Unlock()
+       return m.startSpinner()
+}
+
+func (m *Model) startSpinner() tea.Cmd {
        if m.showSpinner {
                return nil
        }
@@ -294,10 +323,18 @@
 }
 
 func (m *Model) StopSpinner() {
+       m.mu.Lock()
+       defer m.mu.Unlock()
+       m.stopSpinner()
+}
+
+func (m *Model) stopSpinner() {
        m.showSpinner = false
 }
 
 func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+       m.mu.Lock()
+       defer m.mu.Unlock()
        switch msg := msg.(type) {
        case tea.KeyMsg:
                switch {
@@ -368,7 +405,9 @@
        return m, nil
 }
 
-func (m Model) View() string {
+func (m *Model) View() string {
+       m.mu.Lock()
+       defer m.mu.Unlock()
        if m.ShowHelp {
                return m.help.FullHelpView(m.FullHelp())
        }
@@ -446,7 +485,7 @@
        return buf.String()
 }
 
-func (m Model) currentPaginatedPage() []Row {
+func (m *Model) currentPaginatedPage() []Row {
        if len(m.filteredRows) == 0 {
                return nil
        }
@@ -454,7 +493,7 @@
        return m.filteredRows[start:end]
 }
 
-func (m Model) viewWriteRows(buf *bytes.Buffer, currentPage []Row) {
+func (m *Model) viewWriteRows(buf *bytes.Buffer, currentPage []Row) {
        for i, row := range currentPage {
                if i > 0 {
                        buf.WriteByte('\n')
@@ -463,7 +502,7 @@
        }
 }
 
-func (m Model) rowView(buf *bytes.Buffer, row Row) {
+func (m *Model) rowView(buf *bytes.Buffer, row Row) {
        style := m.Styles.Row.Cell
        switch row.Status {
        case StatusError:
@@ -476,7 +515,7 @@
 
 var lotsOfSpaces = strings.Repeat(" ", 200)
 
-func (m Model) columnsView(buf *bytes.Buffer, columns []string, style 
lipgloss.Style) {
+func (m *Model) columnsView(buf *bytes.Buffer, columns []string, style 
lipgloss.Style) {
        for i, col := range columns {
                if i > 0 {
                        // TODO: test style.Width()

++++++ kubectl-klock.obsinfo ++++++
--- /var/tmp/diff_new_pack.9VsVrP/_old  2026-05-29 18:09:48.097076863 +0200
+++ /var/tmp/diff_new_pack.9VsVrP/_new  2026-05-29 18:09:48.105077197 +0200
@@ -1,5 +1,5 @@
 name: kubectl-klock
-version: 0.9.0
-mtime: 1776956309
-commit: bea45b953405a1fbfbe43a98ba01fe81d607de78
+version: 0.9.1
+mtime: 1779966963
+commit: 6506dad4cbf87eed4da486037b9bc73bd82b5b87
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/kubectl-klock/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.kubectl-klock.new.1937/vendor.tar.gz differ: char 
13, line 1

Reply via email to