Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package minio-client for openSUSE:Factory 
checked in at 2025-07-20 15:29:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/minio-client (Old)
 and      /work/SRC/openSUSE:Factory/.minio-client.new.8875 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "minio-client"

Sun Jul 20 15:29:07 2025 rev:114 rq:1294516 version:20250716T153503Z

Changes:
--------
--- /work/SRC/openSUSE:Factory/minio-client/minio-client.changes        
2025-05-26 18:38:24.338653992 +0200
+++ /work/SRC/openSUSE:Factory/.minio-client.new.8875/minio-client.changes      
2025-07-20 15:30:15.179001598 +0200
@@ -1,0 +2,15 @@
+Fri Jul 18 23:58:42 UTC 2025 - Marcus Rueckert <mrueck...@suse.de>
+
+- Update to version 20250716T153503Z:
+  * fix: redact sse key in debug logs (#5231)
+  * mv:support set tag and checksum (#5133)
+  * ping: support ping a specified node and remove duplicate port printing 
(#5132)
+  * feat: add `--storage-class` option to `mc put` subcommand (#5228)
+  * mirror and cp support set the maximum number of threads (#5220)
+  * Some paths like url2Stat will send resource with backslashes on windows 
(#5226)
+  * Include ARN in "replicate list" output (#5215)
+  * Update build version (#5218)
+  * fix: add checks for nil HTTP in admin-trace matches func (#5216)
+  * remove fips 'mc' container Dockerfile
+
+-------------------------------------------------------------------

Old:
----
  minio-client-20250521T015954Z.obscpio
  vendor.tar.gz

New:
----
  minio-client-20250716T153503Z.obscpio
  vendor.tar.zst

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

Other differences:
------------------
++++++ minio-client.spec ++++++
--- /var/tmp/diff_new_pack.1xfSYP/_old  2025-07-20 15:30:16.319048774 +0200
+++ /var/tmp/diff_new_pack.1xfSYP/_new  2025-07-20 15:30:16.319048774 +0200
@@ -17,15 +17,16 @@
 
 
 Name:           minio-client
-Version:        20250521T015954Z
+Version:        20250716T153503Z
 Release:        0
 Summary:        Client for MinIO
 License:        AGPL-3.0-only
 URL:            https://github.com/minio/mc
-Source:         %{name}-%{version}.tar.gz
-Source1:        vendor.tar.gz
+Source:         %{name}-%{version}.tar.zst
+Source1:        vendor.tar.zst
 Source2:        README.SUSE
 BuildRequires:  go1.23
+BuildRequires:  zstd
 # obsolete some other package we had in the past
 Provides:       minio-mc = %{version}-%{release}
 Obsoletes:      minio-mc < %{version}-%{release}

++++++ _service ++++++
--- /var/tmp/diff_new_pack.1xfSYP/_old  2025-07-20 15:30:16.363050595 +0200
+++ /var/tmp/diff_new_pack.1xfSYP/_new  2025-07-20 15:30:16.367050761 +0200
@@ -5,7 +5,7 @@
     <param name="exclude">.git</param>
     <param name="changesgenerate">enable</param>
     <param name="versionformat">@PARENT_TAG@</param>
-    <param name="revision">RELEASE.2025-05-21T01-59-54Z</param>
+    <param name="revision">RELEASE.2025-07-16T15-35-03Z</param>
     <param name="match-tag">RELEASE.*</param>
     <param 
name="versionrewrite-pattern">RELEASE\.(.*)-(.*)-(.*)-(.*)-(.*)</param>
     <param name="versionrewrite-replacement">\1\2\3\4\5</param>
@@ -14,13 +14,14 @@
   <service name="set_version" mode="manual">
   </service>
   <service name="go_modules" mode="manual">
+    <param name="compression">zst</param>
   </service>
   <!-- services below are running at buildtime -->
   <service name="tar" mode="buildtime">
   </service>
   <service name="recompress" mode="buildtime">
     <param name="file">*.tar</param>
-    <param name="compression">gz</param>
+    <param name="compression">zst</param>
   </service>
 </services>
 

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.1xfSYP/_old  2025-07-20 15:30:16.383051423 +0200
+++ /var/tmp/diff_new_pack.1xfSYP/_new  2025-07-20 15:30:16.387051588 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/minio/mc</param>
-              <param 
name="changesrevision">f71ad84bcf0fd4369691952af5d925347837dcec</param></service></servicedata>
+              <param 
name="changesrevision">2676e50bc1b9e71d4afe2549d34b8b0245d7a370</param></service></servicedata>
 (No newline at EOF)
 

++++++ minio-client-20250521T015954Z.obscpio -> 
minio-client-20250716T153503Z.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/minio-client-20250521T015954Z/Dockerfile.release.fips 
new/minio-client-20250716T153503Z/Dockerfile.release.fips
--- old/minio-client-20250521T015954Z/Dockerfile.release.fips   2025-05-21 
03:59:54.000000000 +0200
+++ new/minio-client-20250716T153503Z/Dockerfile.release.fips   1970-01-01 
01:00:00.000000000 +0100
@@ -1,24 +0,0 @@
-FROM registry.access.redhat.com/ubi9/ubi-minimal:latest AS build
-
-RUN microdnf update --nodocs --assumeyes  && microdnf install ca-certificates 
--nodocs --assumeyes 
-
-FROM registry.access.redhat.com/ubi9/ubi-micro:latest
-
-ARG TARGETARCH
-ARG RELEASE
-
-LABEL maintainer="MinIO Inc <d...@min.io>"
-
-# On RHEL the certificate bundle is located at:
-# - /etc/pki/tls/certs/ca-bundle.crt (RHEL 6)
-# - /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem (RHEL 7)
-COPY --from=build /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem 
/etc/pki/ca-trust/extracted/pem/
-
-COPY CREDITS /licenses/CREDITS
-COPY LICENSE /licenses/LICENSE
-
-ADD 
https://dl.minio.io/client/mc/release/linux-${TARGETARCH}/archive/mc.${RELEASE}.fips
 /usr/bin/mc
-
-RUN chmod +x /usr/bin/mc
-
-ENTRYPOINT ["mc"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minio-client-20250521T015954Z/cmd/admin-trace.go 
new/minio-client-20250716T153503Z/cmd/admin-trace.go
--- old/minio-client-20250521T015954Z/cmd/admin-trace.go        2025-05-21 
03:59:54.000000000 +0200
+++ new/minio-client-20250716T153503Z/cmd/admin-trace.go        2025-07-16 
17:35:03.000000000 +0200
@@ -411,12 +411,10 @@
                }
        }
 
-       if opts.requestSize > 0 && traceInfo.Trace.HTTP.CallStats.InputBytes < 
int(opts.requestSize) {
-               return false
-       }
-
-       if opts.responseSize > 0 && traceInfo.Trace.HTTP.CallStats.OutputBytes 
< int(opts.responseSize) {
-               return false
+       if traceInfo.Trace.HTTP != nil {
+               if (opts.requestSize > 0 && 
traceInfo.Trace.HTTP.CallStats.InputBytes < int(opts.requestSize)) || 
(opts.responseSize > 0 && traceInfo.Trace.HTTP.CallStats.OutputBytes < 
int(opts.responseSize)) {
+                       return false
+               }
        }
 
        return true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/minio-client-20250521T015954Z/cmd/client-s3-trace_v4.go 
new/minio-client-20250716T153503Z/cmd/client-s3-trace_v4.go
--- old/minio-client-20250521T015954Z/cmd/client-s3-trace_v4.go 2025-05-21 
03:59:54.000000000 +0200
+++ new/minio-client-20250716T153503Z/cmd/client-s3-trace_v4.go 2025-07-16 
17:35:03.000000000 +0200
@@ -38,6 +38,7 @@
 // Request - Trace HTTP Request
 func (t traceV4) Request(req *http.Request) (err error) {
        origAuth := req.Header.Get("Authorization")
+       sseKey := req.Header.Get("X-Amz-Server-Side-Encryption-Customer-Key")
 
        printTrace := func() error {
                reqTrace, rerr := httputil.DumpRequestOut(req, false) // Only 
display header
@@ -47,6 +48,11 @@
                return rerr
        }
 
+       if strings.TrimSpace(sseKey) != "" {
+               // Stripe out SSE-C key from: 
X-Amz-Server-Side-Encryption-Customer-Key=<key>
+               req.Header.Set("X-Amz-Server-Side-Encryption-Customer-Key", 
"**REDACTED**")
+       }
+
        if strings.TrimSpace(origAuth) != "" {
                // Authorization (S3 v4 signature) Format:
                // Authorization: AWS4-HMAC-SHA256 
Credential=AKIAJNACEGBGMXBHLEZA/20150524/us-east-1/s3/aws4_request, 
SignedHeaders=host;x-amz-content-sha256;x-amz-date, 
Signature=bbfaa693c626021bcb5f911cd898a1a30206c1fad6bad1e0eb89e282173bd24c
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minio-client-20250521T015954Z/cmd/cp-main.go 
new/minio-client-20250716T153503Z/cmd/cp-main.go
--- old/minio-client-20250521T015954Z/cmd/cp-main.go    2025-05-21 
03:59:54.000000000 +0200
+++ new/minio-client-20250716T153503Z/cmd/cp-main.go    2025-07-16 
17:35:03.000000000 +0200
@@ -97,6 +97,10 @@
                        Name:  "zip",
                        Usage: "Extract from remote zip file (MinIO server 
source only)",
                },
+               cli.IntFlag{
+                       Name:  "max-workers",
+                       Usage: "maximum number of concurrent copies (default: 
autodetect)",
+               },
                checksumFlag,
        }
 )
@@ -366,7 +370,7 @@
 
        quitCh := make(chan struct{})
        statusCh := make(chan URLs)
-       parallel := newParallelManager(statusCh)
+       parallel := newParallelManager(statusCh, cli.Int("max-workers"))
 
        go func() {
                gracefulStop := func() {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/minio-client-20250521T015954Z/cmd/encryption-methods.go 
new/minio-client-20250716T153503Z/cmd/encryption-methods.go
--- old/minio-client-20250521T015954Z/cmd/encryption-methods.go 2025-05-21 
03:59:54.000000000 +0200
+++ new/minio-client-20250716T153503Z/cmd/encryption-methods.go 2025-07-16 
17:35:03.000000000 +0200
@@ -22,6 +22,7 @@
        "encoding/base64"
        "encoding/hex"
        "fmt"
+       "path/filepath"
        "sort"
        "strings"
 
@@ -60,6 +61,7 @@
 
 // get SSE Key if object prefix matches with given resource.
 func getSSE(resource string, encKeys []prefixSSEPair) encrypt.ServerSide {
+       resource = filepath.ToSlash(resource)
        for _, k := range encKeys {
                if strings.HasPrefix(resource, k.Prefix) {
                        return k.SSE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minio-client-20250521T015954Z/cmd/mirror-main.go 
new/minio-client-20250716T153503Z/cmd/mirror-main.go
--- old/minio-client-20250521T015954Z/cmd/mirror-main.go        2025-05-21 
03:59:54.000000000 +0200
+++ new/minio-client-20250716T153503Z/cmd/mirror-main.go        2025-07-16 
17:35:03.000000000 +0200
@@ -144,6 +144,10 @@
                        Name:  "skip-errors",
                        Usage: "skip any errors when mirroring",
                },
+               cli.IntFlag{
+                       Name:  "max-workers",
+                       Usage: "maximum number of concurrent copies (default: 
autodetect)",
+               },
                checksumFlag,
        }
 )
@@ -907,7 +911,7 @@
                watcher:   NewWatcher(UTCNow()),
        }
 
-       mj.parallel = newParallelManager(mj.statusCh)
+       mj.parallel = newParallelManager(mj.statusCh, opts.maxWorkers)
 
        // we'll define the status to use here,
        // do we want the quiet status? or the progressbar
@@ -1025,6 +1029,7 @@
                userMetadata:          userMetadata,
                encKeyDB:              encKeyDB,
                activeActive:          isActiveActive,
+               maxWorkers:            cli.Int("max-workers"),
        }
 
        // If we are not using active/active and we are not removing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minio-client-20250521T015954Z/cmd/mirror-url.go 
new/minio-client-20250716T153503Z/cmd/mirror-url.go
--- old/minio-client-20250521T015954Z/cmd/mirror-url.go 2025-05-21 
03:59:54.000000000 +0200
+++ new/minio-client-20250716T153503Z/cmd/mirror-url.go 2025-07-16 
17:35:03.000000000 +0200
@@ -278,6 +278,7 @@
        userMetadata                                          map[string]string
        checksum                                              minio.ChecksumType
        sourceListingOnly                                     bool
+       maxWorkers                                            int
 }
 
 // Prepares urls that need to be copied or removed based on requested options.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minio-client-20250521T015954Z/cmd/mv-main.go 
new/minio-client-20250716T153503Z/cmd/mv-main.go
--- old/minio-client-20250521T015954Z/cmd/mv-main.go    2025-05-21 
03:59:54.000000000 +0200
+++ new/minio-client-20250716T153503Z/cmd/mv-main.go    2025-07-16 
17:35:03.000000000 +0200
@@ -59,6 +59,11 @@
                        Name:  "disable-multipart",
                        Usage: "disable multipart upload feature",
                },
+               cli.StringFlag{
+                       Name:  "tags",
+                       Usage: "apply one or more tags to the uploaded objects",
+               },
+               checksumFlag,
        }
 )
 
@@ -112,23 +117,29 @@
   09. Move a list of objects from local file system to MinIO cloud storage 
with specified metadata, separated by ";"
       {{.Prompt}} {{.HelpName}} --attr "key1=value1;key2=value2" Music/*.mp4 
play/mybucket/
 
-  10. Move a folder recursively from MinIO cloud storage to Amazon S3 cloud 
storage with Cache-Control and custom metadata, separated by ";".
+  10. Move a list of objects from local file system to MinIO cloud storage and 
set tags to the uploaded objects
+      {{.Prompt}} {{.HelpName}} --tag "key1=value1" Music/*.mp4 play/mybucket/
+
+  11. Move a folder recursively from MinIO cloud storage to Amazon S3 cloud 
storage with Cache-Control and custom metadata, separated by ";".
       {{.Prompt}} {{.HelpName}} --attr 
"Cache-Control=max-age=90000,min-fresh=9000;key1=value1;key2=value2" 
--recursive play/mybucket/myfolder/ s3/mybucket/
 
-  11. Move a text file to an object storage and assign REDUCED_REDUNDANCY 
storage-class to the uploaded object.
+  12. Move a text file to an object storage and assign REDUCED_REDUNDANCY 
storage-class to the uploaded object.
       {{.Prompt}} {{.HelpName}} --storage-class REDUCED_REDUNDANCY 
myobject.txt play/mybucket
 
-  12. Move a text file to an object storage and preserve the file system 
attribute as metadata.
+  13. Move a text file to an object storage and preserve the file system 
attribute as metadata.
       {{.Prompt}} {{.HelpName}} -a myobject.txt play/mybucket
 
-  13. Move a text file to an object storage and disable multipart upload 
feature.
+  14. Move a text file to an object storage and disable multipart upload 
feature.
       {{.Prompt}} {{.HelpName}} --disable-multipart myobject.txt play/mybucket
 
-  14. Move a folder using client provided encryption keys from Amazon S3 to 
MinIO cloud storage.
+  15. Move a folder using client provided encryption keys from Amazon S3 to 
MinIO cloud storage.
       {{.Prompt}} {{.HelpName}} --r --enc-c 
"s3/documents/=MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MBB" --enc-c 
"myminio/documents/=MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDA" s3/documents/ 
myminio/documents/
 
-  15. Move a folder using specific server managed encryption keys from Amazon 
S3 to MinIO cloud storage.
+  16. Move a folder using specific server managed encryption keys from Amazon 
S3 to MinIO cloud storage.
       {{.Prompt}} {{.HelpName}} --r --enc-s3 "s3/documents" --enc-s3 
"myminio/documents" s3/documents/ myminio/documents/
+
+  17. Add SHA256 checksum to move a text file to MinIO cloud storage.
+      {{.Prompt}} {{.HelpName}} --checksum SHA256 myobject.txt play/mybucket
 `,
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/minio-client-20250521T015954Z/cmd/parallel-manager.go 
new/minio-client-20250716T153503Z/cmd/parallel-manager.go
--- old/minio-client-20250521T015954Z/cmd/parallel-manager.go   2025-05-21 
03:59:54.000000000 +0200
+++ new/minio-client-20250716T153503Z/cmd/parallel-manager.go   2025-07-16 
17:35:03.000000000 +0200
@@ -76,11 +76,18 @@
 
        // The maximum memory to use
        maxMem uint64
+
+       // The maximum workers will be created
+       maxWorkers int
 }
 
 // addWorker creates a new worker to process tasks
 func (p *ParallelManager) addWorker() {
-       if atomic.LoadUint32(&p.workersNum) >= maxParallelWorkers {
+       maxWorkers := maxParallelWorkers
+       if p.maxWorkers > 0 {
+               maxWorkers = p.maxWorkers
+       }
+       if int(atomic.LoadUint32(&p.workersNum)) >= maxWorkers {
                // Number of maximum workers is reached, no need to
                // to create a new one.
                return
@@ -266,7 +273,7 @@
 }
 
 // newParallelManager starts new workers waiting for executing tasks
-func newParallelManager(resultCh chan URLs) *ParallelManager {
+func newParallelManager(resultCh chan URLs, maxWorkers int) *ParallelManager {
        p := &ParallelManager{
                wg:            &sync.WaitGroup{},
                workersNum:    0,
@@ -274,6 +281,7 @@
                queueCh:       make(chan task),
                resultCh:      resultCh,
                maxMem:        availableMemory(),
+               maxWorkers:    maxWorkers,
        }
 
        // Start with runtime.NumCPU().
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minio-client-20250521T015954Z/cmd/ping.go 
new/minio-client-20250716T153503Z/cmd/ping.go
--- old/minio-client-20250521T015954Z/cmd/ping.go       2025-05-21 
03:59:54.000000000 +0200
+++ new/minio-client-20250716T153503Z/cmd/ping.go       2025-07-16 
17:35:03.000000000 +0200
@@ -58,6 +58,10 @@
                Name:  "distributed, a",
                Usage: "ping all the servers in the cluster, use it when you 
have direct access to nodes/pods",
        },
+       cli.StringFlag{
+               Name:  "node",
+               Usage: "ping the specified node",
+       },
 }
 
 // return latency and liveness probe.
@@ -116,11 +120,11 @@
 }
 
 // PingDist is the template for ping result in distributed mode
-const PingDist = `{{$x := .Counter}}{{range .EndPointsStats}}{{if eq "0  " 
.CountErr}}{{colorWhite $x}}{{colorWhite ": "}}{{colorWhite 
.Endpoint.Scheme}}{{colorWhite "://"}}{{colorWhite .Endpoint.Host}}{{if ne "" 
.Endpoint.Port}}{{colorWhite ":"}}{{colorWhite 
.Endpoint.Port}}{{end}}{{"\t"}}{{ colorWhite "min="}}{{colorWhite 
.Min}}{{"\t"}}{{colorWhite "max="}}{{colorWhite .Max}}{{"\t"}}{{colorWhite 
"average="}}{{colorWhite .Average}}{{"\t"}}{{colorWhite "errors="}}{{colorWhite 
.CountErr}}{{" "}}{{colorWhite "roundtrip="}}{{colorWhite 
.Roundtrip}}{{else}}{{colorRed $x}}{{colorRed ": "}}{{colorRed 
.Endpoint.Scheme}}{{colorRed "://"}}{{colorRed .Endpoint.Host}}{{if ne "" 
.Endpoint.Port}}{{colorRed ":"}}{{colorRed .Endpoint.Port}}{{end}}{{"\t"}}{{ 
colorRed "min="}}{{colorRed .Min}}{{"\t"}}{{colorRed "max="}}{{colorRed 
.Max}}{{"\t"}}{{colorRed "average="}}{{colorRed .Average}}{{"\t"}}{{colorRed 
"errors="}}{{colorRed .CountErr}}{{" "}}{{colorRed "roundtrip="}}{{colorRed 
.Roundtrip}}{{end}}
+const PingDist = `{{$x := .Counter}}{{range .EndPointsStats}}{{if eq "0  " 
.CountErr}}{{colorWhite $x}}{{colorWhite ": "}}{{colorWhite 
.Endpoint.Scheme}}{{colorWhite "://"}}{{colorWhite .Endpoint.Host}}{{"\t"}}{{ 
colorWhite "min="}}{{colorWhite .Min}}{{"\t"}}{{colorWhite "max="}}{{colorWhite 
.Max}}{{"\t"}}{{colorWhite "average="}}{{colorWhite 
.Average}}{{"\t"}}{{colorWhite "errors="}}{{colorWhite .CountErr}}{{" 
"}}{{colorWhite "roundtrip="}}{{colorWhite .Roundtrip}}{{else}}{{colorRed 
$x}}{{colorRed ": "}}{{colorRed .Endpoint.Scheme}}{{colorRed "://"}}{{colorRed 
.Endpoint.Host}}{{if ne "" .Endpoint.Port}}{{colorRed ":"}}{{colorRed 
.Endpoint.Port}}{{end}}{{"\t"}}{{ colorRed "min="}}{{colorRed 
.Min}}{{"\t"}}{{colorRed "max="}}{{colorRed .Max}}{{"\t"}}{{colorRed 
"average="}}{{colorRed .Average}}{{"\t"}}{{colorRed "errors="}}{{colorRed 
.CountErr}}{{" "}}{{colorRed "roundtrip="}}{{colorRed .Roundtrip}}{{end}}
 {{end}}`
 
 // Ping is the template for ping result
-const Ping = `{{$x := .Counter}}{{range .EndPointsStats}}{{if eq "0  " 
.CountErr}}{{colorWhite $x}}{{colorWhite ": "}}{{colorWhite 
.Endpoint.Scheme}}{{colorWhite "://"}}{{colorWhite .Endpoint.Host}}{{if ne "" 
.Endpoint.Port}}{{colorWhite ":"}}{{colorWhite 
.Endpoint.Port}}{{end}}{{"\t"}}{{ colorWhite "min="}}{{colorWhite 
.Min}}{{"\t"}}{{colorWhite "max="}}{{colorWhite .Max}}{{"\t"}}{{colorWhite 
"average="}}{{colorWhite .Average}}{{"\t"}}{{colorWhite "errors="}}{{colorWhite 
.CountErr}}{{" "}}{{colorWhite "roundtrip="}}{{colorWhite 
.Roundtrip}}{{else}}{{colorRed $x}}{{colorRed ": "}}{{colorRed 
.Endpoint.Scheme}}{{colorRed "://"}}{{colorRed .Endpoint.Host}}{{if ne "" 
.Endpoint.Port}}{{colorRed ":"}}{{colorRed .Endpoint.Port}}{{end}}{{"\t"}}{{ 
colorRed "min="}}{{colorRed .Min}}{{"\t"}}{{colorRed "max="}}{{colorRed 
.Max}}{{"\t"}}{{colorRed "average="}}{{colorRed .Average}}{{"\t"}}{{colorRed 
"errors="}}{{colorRed .CountErr}}{{" "}}{{colorRed "roundtrip="}}{{colorRed 
.Roundtrip}}{{end}}{{en
 d}}`
+const Ping = `{{$x := .Counter}}{{range .EndPointsStats}}{{if eq "0  " 
.CountErr}}{{colorWhite $x}}{{colorWhite ": "}}{{colorWhite 
.Endpoint.Scheme}}{{colorWhite "://"}}{{colorWhite .Endpoint.Host}}{{"\t"}}{{ 
colorWhite "min="}}{{colorWhite .Min}}{{"\t"}}{{colorWhite "max="}}{{colorWhite 
.Max}}{{"\t"}}{{colorWhite "average="}}{{colorWhite 
.Average}}{{"\t"}}{{colorWhite "errors="}}{{colorWhite .CountErr}}{{" 
"}}{{colorWhite "roundtrip="}}{{colorWhite .Roundtrip}}{{else}}{{colorRed 
$x}}{{colorRed ": "}}{{colorRed .Endpoint.Scheme}}{{colorRed "://"}}{{colorRed 
.Endpoint.Host}}{{if ne "" .Endpoint.Port}}{{colorRed ":"}}{{colorRed 
.Endpoint.Port}}{{end}}{{"\t"}}{{ colorRed "min="}}{{colorRed 
.Min}}{{"\t"}}{{colorRed "max="}}{{colorRed .Max}}{{"\t"}}{{colorRed 
"average="}}{{colorRed .Average}}{{"\t"}}{{colorRed "errors="}}{{colorRed 
.CountErr}}{{" "}}{{colorRed "roundtrip="}}{{colorRed 
.Roundtrip}}{{end}}{{end}}`
 
 // PingTemplateDist - captures ping template
 var PingTemplateDist = 
template.Must(template.New("ping-list").Funcs(colorMap).Parse(PingDist))
@@ -201,10 +205,28 @@
        }
 }
 
+func filterAdminInfo(admClnt *madmin.AdminClient, nodeName string) 
(madmin.InfoMessage, error) {
+       admInfo, e := fetchAdminInfo(admClnt)
+       if e != nil {
+               return madmin.InfoMessage{}, e
+       }
+       if len(admInfo.Servers) <= 0 || nodeName == "" {
+               return admInfo, nil
+       }
+       for _, server := range admInfo.Servers {
+               if server.Endpoint == nodeName {
+                       admInfo.Servers = []madmin.ServerProperties{server}
+                       return admInfo, nil
+               }
+       }
+       fatalIf(errInvalidArgument().Trace(), "Node "+nodeName+" not exist")
+       return madmin.InfoMessage{}, e
+}
+
 func ping(ctx context.Context, cliCtx *cli.Context, anonClient 
*madmin.AnonymousClient, admInfo madmin.InfoMessage, endPointMap 
map[string]serverStats, index int) {
        var endPointStats []EndPointStats
        var servers []madmin.ServerProperties
-       if cliCtx.Bool("distributed") {
+       if cliCtx.Bool("distributed") || cliCtx.IsSet("node") {
                servers = admInfo.Servers
        }
        allOK := true
@@ -356,6 +378,11 @@
                admInfo, e = fetchAdminInfo(admClient)
                fatalIf(probe.NewError(e).Trace(aliasedURL), "Unable to get 
server info")
        }
+       if cliCtx.IsSet("node") {
+               var e error
+               admInfo, e = filterAdminInfo(admClient, cliCtx.String("node"))
+               fatalIf(probe.NewError(e).Trace(aliasedURL), "Unable to get 
server info")
+       }
 
        // map to contain server stats for all the servers
        serverMap := make(map[string]serverStats)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minio-client-20250521T015954Z/cmd/put-main.go 
new/minio-client-20250716T153503Z/cmd/put-main.go
--- old/minio-client-20250521T015954Z/cmd/put-main.go   2025-05-21 
03:59:54.000000000 +0200
+++ new/minio-client-20250716T153503Z/cmd/put-main.go   2025-07-16 
17:35:03.000000000 +0200
@@ -51,6 +51,10 @@
                        Name:  "disable-multipart",
                        Usage: "disable multipart upload feature",
                },
+               cli.StringFlag{
+                       Name:  "storage-class, sc",
+                       Usage: "set storage class for new object on target",
+               },
        }
 )
 
@@ -90,7 +94,10 @@
      {{.Prompt}} {{.HelpName}} --enc-c 
"play/mybucket/object=MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDA" 
path-to/object play/mybucket/object 
 
   5. Put an object to MinIO storage using sse-kms encryption
-     {{.Prompt}} {{.HelpName}} --enc-kms path-to/object play/mybucket/object 
+     {{.Prompt}} {{.HelpName}} --enc-kms path-to/object play/mybucket/object
+
+  6. Put an object to MinIO storage and assign REDUCED_REDUNDANCY 
storage-class to the uploaded object.
+      {{.Prompt}} {{.HelpName}} --storage-class REDUCED_REDUNDANCY 
myobject.txt play/mybucket
 `,
 }
 
@@ -133,6 +140,10 @@
        if len(args) < 2 {
                fatalIf(errInvalidArgument().Trace(args...), "Invalid number of 
arguments.")
        }
+
+       // Check and handle storage class if passed in command line args
+       storageClass := cliCtx.String("sc")
+
        // get source and target
        sourceURLs := args[:len(args)-1]
        targetURL := args[len(args)-1]
@@ -162,6 +173,9 @@
                                putURLsCh <- putURLs
                                break
                        }
+                       if storageClass != "" {
+                               putURLs.TargetContent.StorageClass = 
storageClass
+                       }
                        putURLs.checksum = checksum
                        putURLs.MD5 = md5
                        totalBytes += putURLs.SourceContent.Size
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minio-client-20250521T015954Z/cmd/replicate-list.go 
new/minio-client-20250716T153503Z/cmd/replicate-list.go
--- old/minio-client-20250521T015954Z/cmd/replicate-list.go     2025-05-21 
03:59:54.000000000 +0200
+++ new/minio-client-20250716T153503Z/cmd/replicate-list.go     2025-07-16 
17:35:03.000000000 +0200
@@ -111,6 +111,7 @@
 
        sb.WriteString(fmt.Sprintf("  Rule ID: %s\n", console.Colorize("Val", 
r.ID)))
        sb.WriteString(fmt.Sprintf("  Priority: %s\n", console.Colorize("Val", 
r.Priority)))
+       sb.WriteString(fmt.Sprintf("  ARN: %s\n", console.Colorize("Val", 
r.Destination.Bucket)))
        if r.Filter.And.Prefix != "" {
                sb.WriteString(fmt.Sprintf("  Prefix: %s\n", 
console.Colorize("Val", r.Filter.And.Prefix)))
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/minio-client-20250521T015954Z/go.mod 
new/minio-client-20250716T153503Z/go.mod
--- old/minio-client-20250521T015954Z/go.mod    2025-05-21 03:59:54.000000000 
+0200
+++ new/minio-client-20250716T153503Z/go.mod    2025-07-16 17:35:03.000000000 
+0200
@@ -2,7 +2,7 @@
 
 go 1.23.0
 
-toolchain go1.23.6
+toolchain go1.23.10
 
 require (
        github.com/charmbracelet/bubbles v0.20.0

++++++ minio-client.obsinfo ++++++
--- /var/tmp/diff_new_pack.1xfSYP/_old  2025-07-20 15:30:16.659062845 +0200
+++ /var/tmp/diff_new_pack.1xfSYP/_new  2025-07-20 15:30:16.659062845 +0200
@@ -1,5 +1,5 @@
 name: minio-client
-version: 20250521T015954Z
-mtime: 1747792794
-commit: f71ad84bcf0fd4369691952af5d925347837dcec
+version: 20250716T153503Z
+mtime: 1752680103
+commit: 2676e50bc1b9e71d4afe2549d34b8b0245d7a370
 

Reply via email to