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 2022-10-11 18:02:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/minio-client (Old)
 and      /work/SRC/openSUSE:Factory/.minio-client.new.2275 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "minio-client"

Tue Oct 11 18:02:16 2022 rev:17 rq:1009248 version:20221009T211059Z

Changes:
--------
--- /work/SRC/openSUSE:Factory/minio-client/minio-client.changes        
2022-10-04 20:38:10.808955048 +0200
+++ /work/SRC/openSUSE:Factory/.minio-client.new.2275/minio-client.changes      
2022-10-11 18:04:54.130021989 +0200
@@ -1,0 +2,19 @@
+Mon Oct 10 06:16:28 UTC 2022 - ka...@b1-systems.de
+
+- Update to version 20221009T211059Z:
+  * feat: Introduce 'mc batch' command (#4225)
+  * Support `--dev` flag in license info|update (#4281)
+  * Keep help output after quitting (#4289)
+  * Replace 'policy' with 'anonymous' in readme (#4287)
+  * Show airgapped registration link in different color (#4282)
+
+-------------------------------------------------------------------
+Mon Oct 10 06:12:07 UTC 2022 - ka...@b1-systems.de
+
+- Update to version 20221006T012006Z:
+  * upgrade pkg and madmin-go deps
+  * Upgrade minio/pkg dependency (#4280)
+  * fix: updateURL when customURL is not passed (#4279)
+  * upgrade minio/pkg v1.4.3
+
+-------------------------------------------------------------------

Old:
----
  mc-20221001T075614Z.tar.gz

New:
----
  mc-20221009T211059Z.tar.gz

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

Other differences:
------------------
++++++ minio-client.spec ++++++
--- /var/tmp/diff_new_pack.kRJZNP/_old  2022-10-11 18:04:54.710022927 +0200
+++ /var/tmp/diff_new_pack.kRJZNP/_new  2022-10-11 18:04:54.714022933 +0200
@@ -22,7 +22,7 @@
 %define binary_name minio-client
 
 Name:           minio-client
-Version:        20221001T075614Z
+Version:        20221009T211059Z
 Release:        0
 Summary:        Client for MinIO
 License:        AGPL-3.0-only

++++++ _service ++++++
--- /var/tmp/diff_new_pack.kRJZNP/_old  2022-10-11 18:04:54.742022979 +0200
+++ /var/tmp/diff_new_pack.kRJZNP/_new  2022-10-11 18:04:54.746022985 +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.2022-10-01T07-56-14Z</param>
+    <param name="revision">RELEASE.2022-10-09T21-10-59Z</param>
     <param name="match-tag">RELEASE.*</param>
     <param 
name="versionrewrite-pattern">RELEASE\.(.*)-(.*)-(.*)-(.*)-(.*)</param>
     <param name="versionrewrite-replacement">\1\2\3\4\5</param>
@@ -21,7 +21,7 @@
     <param name="compression">gz</param>
   </service>
   <service name="go_modules" mode="disabled">
-    <param name="archive">mc-20221001T075614Z.tar.gz</param>
+    <param name="archive">mc-20221009T211059Z.tar.gz</param>
   </service>
 </services>
 

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.kRJZNP/_old  2022-10-11 18:04:54.762023011 +0200
+++ /var/tmp/diff_new_pack.kRJZNP/_new  2022-10-11 18:04:54.766023018 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/minio/mc</param>
-              <param 
name="changesrevision">f73adff2383976d6b5644668bbd491b0551a1c96</param></service></servicedata>
+              <param 
name="changesrevision">27322636ae33611cf193a0fe4b5de18f3b096549</param></service></servicedata>
 (No newline at EOF)
 

++++++ mc-20221001T075614Z.tar.gz -> mc-20221009T211059Z.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/README.md 
new/mc-20221009T211059Z/README.md
--- old/mc-20221001T075614Z/README.md   2022-10-01 09:56:14.000000000 +0200
+++ new/mc-20221009T211059Z/README.md   2022-10-09 23:10:59.000000000 +0200
@@ -24,11 +24,11 @@
 legalhold   set legal hold for object(s)
 diff        list differences in object name, size, and date between two buckets
 rm          remove objects
-encrypt    manage bucket encryption config
+encrypt     manage bucket encryption config
 event       manage object notifications
 watch       listen for object notification events
 undo        undo PUT/DELETE operations
-policy      manage anonymous access to buckets and objects
+anonymous   manage anonymous access to buckets and objects
 tag         manage tags for bucket(s) and object(s)
 ilm         manage bucket lifecycle
 version     manage bucket versioning
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/README_zh_CN.md 
new/mc-20221009T211059Z/README_zh_CN.md
--- old/mc-20221001T075614Z/README_zh_CN.md     2022-10-01 09:56:14.000000000 
+0200
+++ new/mc-20221009T211059Z/README_zh_CN.md     2022-10-09 23:10:59.000000000 
+0200
@@ -5,23 +5,23 @@
 
 
 ```
-ls       ???????????????????????????
-mb       ??????????????????????????????????????????
-cat      ??????????????????????????????
-pipe     ?????????STDIN??????????????????????????????????????????STDOUT???
-share    ?????????????????????URL???
-cp       ????????????????????????
-mirror   ????????????????????????????????????
-find     ???????????????????????????
-diff     ????????????????????????????????????????????????
-rm       ????????????????????????
-events   ?????????????????????
-watch    ?????????????????????????????????
-policy   ?????????????????????
-session  ???cp??????????????????????????????
-config   ??????mc???????????????
-update   ?????????????????????
-version  ?????????????????????
+ls        ???????????????????????????
+mb        ??????????????????????????????????????????
+cat       ??????????????????????????????
+pipe      ?????????STDIN??????????????????????????????????????????STDOUT???
+share     ?????????????????????URL???
+cp        ????????????????????????
+mirror    ????????????????????????????????????
+find      ???????????????????????????
+diff      ????????????????????????????????????????????????
+rm        ????????????????????????
+events    ?????????????????????
+watch     ?????????????????????????????????
+anonymous ?????????????????????
+session   ???cp??????????????????????????????
+config    ??????mc???????????????
+update    ?????????????????????
+version   ?????????????????????
 ```
 
 ## Docker??????
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/admin-info.go 
new/mc-20221009T211059Z/cmd/admin-info.go
--- old/mc-20221001T075614Z/cmd/admin-info.go   2022-10-01 09:56:14.000000000 
+0200
+++ new/mc-20221009T211059Z/cmd/admin-info.go   2022-10-09 23:10:59.000000000 
+0200
@@ -119,18 +119,20 @@
 }
 
 // String provides colorized info messages depending on the type of a server
-//        FS server                          non-FS server
+//
+//     FS server                          non-FS server
+//
 // ==============================  ===================================
 // ??? <ip>:<port>                   ??? <ip>:<port>
-//   Uptime: xxx                     Uptime: xxx
-//   Version: xxx                    Version: xxx
-//   Network: X/Y OK                 Network: X/Y OK
 //
-// U Used, B Buckets, O Objects    Drives: N/N OK
+//     Uptime: xxx                     Uptime: xxx
+//     Version: xxx                    Version: xxx
+//     Network: X/Y OK                 Network: X/Y OK
 //
-//                                   U Used, B Buckets, O Objects
-//                                   N drives online, K drives offline
+// U Used, B Buckets, O Objects    Drives: N/N OK
 //
+//     U Used, B Buckets, O Objects
+//     N drives online, K drives offline
 func (u clusterStruct) String() (msg string) {
        // Check cluster level "Status" field for error
        if u.Status == "error" {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/admin-trace.go 
new/mc-20221009T211059Z/cmd/admin-trace.go
--- old/mc-20221001T075614Z/cmd/admin-trace.go  2022-10-01 09:56:14.000000000 
+0200
+++ new/mc-20221009T211059Z/cmd/admin-trace.go  2022-10-09 23:10:59.000000000 
+0200
@@ -267,8 +267,8 @@
 
 // Calculate tracing options for command line flags
 func tracingOpts(ctx *cli.Context, apis []string) (opts 
madmin.ServiceTraceOpts, e error) {
-       opts.OnlyErrors = ctx.Bool("errors")
        opts.Threshold = ctx.Duration("response-threshold")
+       opts.OnlyErrors = ctx.Bool("errors")
 
        if ctx.Bool("all") {
                opts.S3 = true
@@ -278,6 +278,7 @@
                opts.Scanner = true
                opts.Decommission = true
                opts.Healing = true
+               opts.BatchReplication = true
                return
        }
 
@@ -304,6 +305,8 @@
                        opts.Healing = true
                case "decom", "decommission":
                        opts.Decommission = true
+               case "batch-replication":
+                       opts.BatchReplication = true
                }
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/auto-complete.go 
new/mc-20221009T211059Z/cmd/auto-complete.go
--- old/mc-20221001T075614Z/cmd/auto-complete.go        2022-10-01 
09:56:14.000000000 +0200
+++ new/mc-20221009T211059Z/cmd/auto-complete.go        2022-10-09 
23:10:59.000000000 +0200
@@ -443,10 +443,15 @@
        "/license/info":     aliasCompleter,
        "/license/update":   aliasCompleter,
 
-       "/update": nil,
-       "/ready":  nil,
-       "/ping":   nil,
-       "/od":     nil,
+       "/update":         nil,
+       "/ready":          aliasCompleter,
+       "/ping":           aliasCompleter,
+       "/od":             nil,
+       "/batch/generate": aliasCompleter,
+       "/batch/start":    aliasCompleter,
+       "/batch/list":     aliasCompleter,
+       "/batch/status":   aliasCompleter,
+       "/batch/describe": aliasCompleter,
 }
 
 // flagsToCompleteFlags transforms a cli.Flag to complete.Flags
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/batch-describe.go 
new/mc-20221009T211059Z/cmd/batch-describe.go
--- old/mc-20221001T075614Z/cmd/batch-describe.go       1970-01-01 
01:00:00.000000000 +0100
+++ new/mc-20221009T211059Z/cmd/batch-describe.go       2022-10-09 
23:10:59.000000000 +0200
@@ -0,0 +1,78 @@
+// Copyright (c) 2015-2022 MinIO, Inc.
+//
+// This file is part of MinIO Object Storage stack
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+package cmd
+
+import (
+       "context"
+       "fmt"
+
+       "github.com/minio/cli"
+       "github.com/minio/mc/pkg/probe"
+)
+
+var batchDescribeCmd = cli.Command{
+       Name:         "describe",
+       Usage:        "describe job definition for a job",
+       Action:       mainBatchDescribe,
+       OnUsageError: onUsageError,
+       Before:       setGlobalsFromContext,
+       Flags:        globalFlags,
+       CustomHelpTemplate: `NAME:
+  {{.HelpName}} - {{.Usage}}
+
+USAGE:
+  {{.HelpName}} TARGET JOBID
+
+FLAGS:
+  {{range .VisibleFlags}}{{.}}
+  {{end}}
+EXAMPLES:
+  1. Describe current batch job definition:
+     {{.Prompt}} {{.HelpName}} myminio KwSysDpxcBU9FNhGkn2dCf
+`,
+}
+
+// checkBatchDescribeSyntax - validate all the passed arguments
+func checkBatchDescribeSyntax(ctx *cli.Context) {
+       if len(ctx.Args()) != 2 {
+               cli.ShowCommandHelpAndExit(ctx, ctx.Command.Name, 1) // last 
argument is exit code
+       }
+}
+
+// mainBatchDescribe is the handle for "mc batch create" command.
+func mainBatchDescribe(ctx *cli.Context) error {
+       checkBatchDescribeSyntax(ctx)
+
+       // Get the alias parameter from cli
+       args := ctx.Args()
+       aliasedURL := args.Get(0)
+       jobID := args.Get(1)
+
+       // Start a new MinIO Admin Client
+       adminClient, err := newAdminClient(aliasedURL)
+       fatalIf(err, "Unable to initialize admin connection.")
+
+       ctxt, cancel := context.WithCancel(globalContext)
+       defer cancel()
+
+       job, e := adminClient.DescribeBatchJob(ctxt, jobID)
+       fatalIf(probe.NewError(e), "Unable to fetch the job definition")
+
+       fmt.Println(job)
+       return nil
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/batch-generate.go 
new/mc-20221009T211059Z/cmd/batch-generate.go
--- old/mc-20221001T075614Z/cmd/batch-generate.go       1970-01-01 
01:00:00.000000000 +0100
+++ new/mc-20221009T211059Z/cmd/batch-generate.go       2022-10-09 
23:10:59.000000000 +0200
@@ -0,0 +1,81 @@
+// Copyright (c) 2015-2022 MinIO, Inc.
+//
+// This file is part of MinIO Object Storage stack
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+package cmd
+
+import (
+       "fmt"
+
+       "github.com/minio/cli"
+       "github.com/minio/madmin-go"
+       "github.com/minio/mc/pkg/probe"
+)
+
+var batchGenerateCmd = cli.Command{
+       Name:         "generate",
+       Usage:        "generate a new batch job definition",
+       Action:       mainBatchGenerate,
+       OnUsageError: onUsageError,
+       Before:       setGlobalsFromContext,
+       Flags:        globalFlags,
+       CustomHelpTemplate: `NAME:
+  {{.HelpName}} - {{.Usage}}
+
+USAGE:
+  {{.HelpName}} TARGET JOBTYPE
+
+FLAGS:
+  {{range .VisibleFlags}}{{.}}
+  {{end}}
+EXAMPLES:
+  1. Generate a new batch 'replication' job definition:
+     {{.Prompt}} {{.HelpName}} myminio replicate > replication.yaml
+`,
+}
+
+// checkBatchGenerateSyntax - validate all the passed arguments
+func checkBatchGenerateSyntax(ctx *cli.Context) {
+       if len(ctx.Args()) != 2 {
+               cli.ShowCommandHelpAndExit(ctx, ctx.Command.Name, 1) // last 
argument is exit code
+       }
+}
+
+// mainBatchGenerate is the handle for "mc batch generate" command.
+func mainBatchGenerate(ctx *cli.Context) error {
+       checkBatchGenerateSyntax(ctx)
+
+       // Get the alias parameter from cli
+       args := ctx.Args()
+       aliasedURL := args.Get(0)
+       jobType := args.Get(1)
+
+       // Start a new MinIO Admin Client
+       adminClient, err := newAdminClient(aliasedURL)
+       fatalIf(err, "Unable to initialize admin connection.")
+
+       switch jobType {
+       case string(madmin.BatchJobReplicate):
+       default:
+               fatalIf(errInvalidArgument().Trace(jobType), "Unable to 
generate a job template for the specified job type")
+       }
+
+       out, e := adminClient.GenerateBatchJob(globalContext, 
madmin.GenerateBatchJobOpts{})
+       fatalIf(probe.NewError(e), "Unable to generate %s", args.Get(1))
+
+       fmt.Println(string(out))
+       return nil
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/batch-list.go 
new/mc-20221009T211059Z/cmd/batch-list.go
--- old/mc-20221001T075614Z/cmd/batch-list.go   1970-01-01 01:00:00.000000000 
+0100
+++ new/mc-20221009T211059Z/cmd/batch-list.go   2022-10-09 23:10:59.000000000 
+0200
@@ -0,0 +1,152 @@
+// Copyright (c) 2015-2022 MinIO, Inc.
+//
+// This file is part of MinIO Object Storage stack
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+package cmd
+
+import (
+       "context"
+       "strings"
+
+       humanize "github.com/dustin/go-humanize"
+       "github.com/minio/cli"
+       json "github.com/minio/colorjson"
+       "github.com/minio/madmin-go"
+       "github.com/minio/mc/pkg/probe"
+       "github.com/olekukonko/tablewriter"
+)
+
+var batchListFlags = []cli.Flag{
+       cli.StringFlag{
+               Name:  "type",
+               Usage: "list all current batch jobs via job type",
+       },
+}
+
+var batchListCmd = cli.Command{
+       Name:         "list",
+       ShortName:    "ls",
+       Usage:        "list all current batch jobs",
+       Action:       mainBatchList,
+       OnUsageError: onUsageError,
+       Before:       setGlobalsFromContext,
+       Flags:        append(batchListFlags, globalFlags...),
+       CustomHelpTemplate: `NAME:
+  {{.HelpName}} - {{.Usage}}
+
+USAGE:
+  {{.HelpName}} TARGET
+
+FLAGS:
+  {{range .VisibleFlags}}{{.}}
+  {{end}}
+EXAMPLES:
+  1. List all current batch jobs:
+     {{.Prompt}} {{.HelpName}} myminio
+
+  2. List all current batch jobs of type 'replicate':
+     {{.Prompt}} {{.HelpName}} myminio/ --type "replicate"
+`,
+}
+
+// batchListMessage container for file batchList messages
+type batchListMessage struct {
+       Status string                  `json:"status"`
+       Jobs   []madmin.BatchJobResult `json:"jobs"`
+}
+
+// String colorized batchList message
+func (c batchListMessage) String() string {
+       if len(c.Jobs) == 0 {
+               return "currently no jobs are running"
+       }
+
+       var s strings.Builder
+
+       // Set table header
+       table := tablewriter.NewWriter(&s)
+       table.SetAutoWrapText(false)
+       table.SetAutoFormatHeaders(true)
+       table.SetHeaderAlignment(tablewriter.ALIGN_LEFT)
+       table.SetAlignment(tablewriter.ALIGN_LEFT)
+       table.SetCenterSeparator("")
+       table.SetColumnSeparator("")
+       table.SetRowSeparator("")
+       table.SetHeaderLine(false)
+       table.SetBorder(false)
+       table.SetTablePadding("\t") // pad with tabs
+       table.SetNoWhiteSpace(true)
+
+       table.SetHeader([]string{"ID", "TYPE", "USER", "STARTED"})
+       data := make([][]string, 0, 4)
+
+       for _, job := range c.Jobs {
+               data = append(data, []string{
+                       job.ID,
+                       string(job.Type),
+                       job.User,
+                       humanize.Time(job.Started),
+               })
+       }
+
+       table.AppendBulk(data)
+       table.Render()
+
+       return s.String()
+}
+
+// JSON jsonified batchList message
+func (c batchListMessage) JSON() string {
+       c.Status = "success"
+       batchListMessageBytes, e := json.MarshalIndent(c, "", " ")
+       fatalIf(probe.NewError(e), "Unable to marshal into JSON.")
+
+       return string(batchListMessageBytes)
+}
+
+// checkBatchListSyntax - validate all the passed arguments
+func checkBatchListSyntax(ctx *cli.Context) {
+       if len(ctx.Args()) != 1 {
+               cli.ShowCommandHelpAndExit(ctx, ctx.Command.Name, 1) // last 
argument is exit code
+       }
+}
+
+// mainBatchList is the handle for "mc batch create" command.
+func mainBatchList(ctx *cli.Context) error {
+       checkBatchListSyntax(ctx)
+
+       // Get the alias parameter from cli
+       args := ctx.Args()
+       aliasedURL := args.Get(0)
+
+       // Start a new MinIO Admin Client
+       adminClient, err := newAdminClient(aliasedURL)
+       fatalIf(err, "Unable to initialize admin connection.")
+
+       ctxt, cancel := context.WithCancel(globalContext)
+       defer cancel()
+
+       res, e := adminClient.ListBatchJobs(ctxt, &madmin.ListBatchJobsFilter{
+               ByJobType: ctx.String("type"),
+       })
+       fatalIf(probe.NewError(e), "Unable to list jobs")
+
+       printMsg(batchListMessage{
+               Status: "success",
+               Jobs:   res.Jobs,
+       })
+       return nil
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/batch-main.go 
new/mc-20221009T211059Z/cmd/batch-main.go
--- old/mc-20221001T075614Z/cmd/batch-main.go   1970-01-01 01:00:00.000000000 
+0100
+++ new/mc-20221009T211059Z/cmd/batch-main.go   2022-10-09 23:10:59.000000000 
+0200
@@ -0,0 +1,47 @@
+// Copyright (c) 2015-2022 MinIO, Inc.
+//
+// This file is part of MinIO Object Storage stack
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+package cmd
+
+import "github.com/minio/cli"
+
+var batchSubcommands = []cli.Command{
+       batchGenerateCmd,
+       batchStartCmd,
+       batchListCmd,
+       batchStatusCmd,
+       batchDescribeCmd,
+       // batchSuspendResumeCmd,
+       // batchStopCmd,
+}
+
+var batchCmd = cli.Command{
+       Name:            "batch",
+       Usage:           "manage batch jobs",
+       Action:          mainBatch,
+       Before:          setGlobalsFromContext,
+       Flags:           globalFlags,
+       Subcommands:     batchSubcommands,
+       HideHelpCommand: true,
+}
+
+// mainBatch is the handle for "mc batch" command.
+func mainBatch(ctx *cli.Context) error {
+       commandNotFound(ctx, batchSubcommands)
+       return nil
+       // Sub-commands like "generate", "list", "info" have their own main.
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/batch-start.go 
new/mc-20221009T211059Z/cmd/batch-start.go
--- old/mc-20221001T075614Z/cmd/batch-start.go  1970-01-01 01:00:00.000000000 
+0100
+++ new/mc-20221009T211059Z/cmd/batch-start.go  2022-10-09 23:10:59.000000000 
+0200
@@ -0,0 +1,110 @@
+// Copyright (c) 2015-2022 MinIO, Inc.
+//
+// This file is part of MinIO Object Storage stack
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+package cmd
+
+import (
+       "context"
+       "fmt"
+       "io/ioutil"
+
+       "github.com/fatih/color"
+       "github.com/minio/cli"
+       json "github.com/minio/colorjson"
+       "github.com/minio/madmin-go"
+       "github.com/minio/mc/pkg/probe"
+       "github.com/minio/pkg/console"
+)
+
+var batchStartCmd = cli.Command{
+       Name:         "start",
+       Usage:        "start a new batch job",
+       Action:       mainBatchStart,
+       OnUsageError: onUsageError,
+       Before:       setGlobalsFromContext,
+       Flags:        globalFlags,
+       CustomHelpTemplate: `NAME:
+  {{.HelpName}} - {{.Usage}}
+
+USAGE:
+  {{.HelpName}} TARGET JOBFILE
+
+FLAGS:
+  {{range .VisibleFlags}}{{.}}
+  {{end}}
+EXAMPLES:
+  1. Start a new batch 'replication' job:
+     {{.Prompt}} {{.HelpName}} myminio ./replication.yaml
+`,
+}
+
+// batchStartMessage container for file batchStart messages
+type batchStartMessage struct {
+       Status string                `json:"status"`
+       Result madmin.BatchJobResult `json:"result"`
+}
+
+// String colorized batchStart message
+func (c batchStartMessage) String() string {
+       return console.Colorize("BatchStart", fmt.Sprintf("Successfully started 
'%s' job `%s` on '%s'", c.Result.Type, c.Result.ID, c.Result.Started))
+}
+
+// JSON jsonified batchStart message
+func (c batchStartMessage) JSON() string {
+       c.Status = "success"
+       batchStartMessageBytes, e := json.MarshalIndent(c, "", " ")
+       fatalIf(probe.NewError(e), "Unable to marshal into JSON.")
+
+       return string(batchStartMessageBytes)
+}
+
+// checkBatchStartSyntax - validate all the passed arguments
+func checkBatchStartSyntax(ctx *cli.Context) {
+       if len(ctx.Args()) != 2 {
+               cli.ShowCommandHelpAndExit(ctx, ctx.Command.Name, 1) // last 
argument is exit code
+       }
+}
+
+// mainBatchStart is the handle for "mc batch create" command.
+func mainBatchStart(ctx *cli.Context) error {
+       checkBatchStartSyntax(ctx)
+
+       console.SetColor("BatchStart", color.New(color.FgGreen, color.Bold))
+
+       // Get the alias parameter from cli
+       args := ctx.Args()
+       aliasedURL := args.Get(0)
+
+       // Start a new MinIO Admin Client
+       adminClient, err := newAdminClient(aliasedURL)
+       fatalIf(err, "Unable to initialize admin connection.")
+
+       buf, e := ioutil.ReadFile(args.Get(1))
+       fatalIf(probe.NewError(e), "Unable to read %s", args.Get(1))
+
+       ctxt, cancel := context.WithCancel(globalContext)
+       defer cancel()
+
+       res, e := adminClient.StartBatchJob(ctxt, string(buf))
+       fatalIf(probe.NewError(e), "Unable to start job")
+
+       printMsg(batchStartMessage{
+               Status: "success",
+               Result: res,
+       })
+       return nil
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/batch-status.go 
new/mc-20221009T211059Z/cmd/batch-status.go
--- old/mc-20221001T075614Z/cmd/batch-status.go 1970-01-01 01:00:00.000000000 
+0100
+++ new/mc-20221009T211059Z/cmd/batch-status.go 2022-10-09 23:10:59.000000000 
+0200
@@ -0,0 +1,218 @@
+package cmd
+
+import (
+       "context"
+       "errors"
+       "fmt"
+       "os"
+       "strings"
+       "time"
+
+       "github.com/charmbracelet/bubbles/spinner"
+       tea "github.com/charmbracelet/bubbletea"
+       "github.com/charmbracelet/lipgloss"
+       "github.com/dustin/go-humanize"
+       "github.com/minio/cli"
+       "github.com/minio/madmin-go"
+       "github.com/minio/mc/pkg/probe"
+       "github.com/olekukonko/tablewriter"
+)
+
+var batchStatusCmd = cli.Command{
+       Name:            "status",
+       Usage:           "summarize job events on MinIO server in real-time",
+       Action:          mainBatchStatus,
+       OnUsageError:    onUsageError,
+       Before:          setGlobalsFromContext,
+       Flags:           globalFlags,
+       HideHelpCommand: true,
+       CustomHelpTemplate: `NAME:
+  {{.HelpName}} - {{.Usage}}
+
+USAGE:
+  {{.HelpName}} TARGET JOBID
+
+FLAGS:
+  {{range .VisibleFlags}}{{.}}
+  {{end}}
+EXAMPLES:
+   1. Display current in-progress JOB events.
+      {{.Prompt}} {{.HelpName}} myminio/ KwSysDpxcBU9FNhGkn2dCf
+`,
+}
+
+// checkBatchStatusSyntax - validate all the passed arguments
+func checkBatchStatusSyntax(ctx *cli.Context) {
+       if len(ctx.Args()) != 2 {
+               cli.ShowCommandHelpAndExit(ctx, ctx.Command.Name, 1) // last 
argument is exit code
+       }
+}
+
+func mainBatchStatus(ctx *cli.Context) error {
+       checkBatchStatusSyntax(ctx)
+
+       aliasedURL := ctx.Args().Get(0)
+       jobID := ctx.Args().Get(1)
+
+       // Create a new MinIO Admin Client
+       client, err := newAdminClient(aliasedURL)
+       fatalIf(err.Trace(aliasedURL), "Unable to initialize admin client.")
+
+       ctxt, cancel := context.WithCancel(globalContext)
+       defer cancel()
+
+       done := make(chan struct{})
+
+       _, e := client.DescribeBatchJob(ctxt, jobID)
+       fatalIf(probe.NewError(e), "Unable to lookup job status")
+
+       ui := tea.NewProgram(initBatchJobMetricsUI(jobID))
+       if !globalJSON {
+               go func() {
+                       if e := ui.Start(); e != nil {
+                               cancel()
+                               os.Exit(1)
+                       }
+                       close(done)
+               }()
+       }
+
+       go func() {
+               opts := madmin.MetricsOptions{
+                       Type:    madmin.MetricsBatchJobs,
+                       ByJobID: jobID,
+               }
+               e := client.Metrics(ctxt, opts, func(metrics 
madmin.RealtimeMetrics) {
+                       if globalJSON {
+                               printMsg(metricsMessage{RealtimeMetrics: 
metrics})
+                               return
+                       }
+                       if metrics.Aggregated.BatchJobs != nil {
+                               job := metrics.Aggregated.BatchJobs.Jobs[jobID]
+                               ui.Send(job)
+                               if job.Complete {
+                                       cancel()
+                               }
+                       }
+               })
+               if e != nil && !errors.Is(e, context.Canceled) {
+                       fatalIf(probe.NewError(e).Trace(ctx.Args()...), "Unable 
to get current status")
+               }
+       }()
+
+       <-done
+       return nil
+}
+
+func initBatchJobMetricsUI(jobID string) *batchJobMetricsUI {
+       s := spinner.New()
+       s.Spinner = spinner.Points
+       s.Style = lipgloss.NewStyle().Foreground(lipgloss.Color("205"))
+       return &batchJobMetricsUI{
+               spinner: s,
+               jobID:   jobID,
+       }
+}
+
+type batchJobMetricsUI struct {
+       current  madmin.JobMetric
+       spinner  spinner.Model
+       quitting bool
+       jobID    string
+}
+
+func (m *batchJobMetricsUI) Init() tea.Cmd {
+       return m.spinner.Tick
+}
+
+func (m *batchJobMetricsUI) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+       switch msg := msg.(type) {
+       case tea.KeyMsg:
+               switch msg.String() {
+               case "ctrl+c":
+                       m.quitting = true
+                       return m, tea.Quit
+               default:
+                       return m, nil
+               }
+       case madmin.JobMetric:
+               m.current = msg
+               if msg.Complete {
+                       m.quitting = true
+                       return m, tea.Quit
+               }
+               return m, nil
+       case spinner.TickMsg:
+               var cmd tea.Cmd
+               m.spinner, cmd = m.spinner.Update(msg)
+               return m, cmd
+       default:
+               return m, nil
+       }
+}
+
+func (m *batchJobMetricsUI) View() string {
+       var s strings.Builder
+
+       // Set table header
+       table := tablewriter.NewWriter(&s)
+       table.SetAutoWrapText(false)
+       table.SetAutoFormatHeaders(true)
+       table.SetHeaderAlignment(tablewriter.ALIGN_LEFT)
+       table.SetAlignment(tablewriter.ALIGN_LEFT)
+       table.SetCenterSeparator("")
+       table.SetColumnSeparator("")
+       table.SetRowSeparator("")
+       table.SetHeaderLine(false)
+       table.SetBorder(false)
+       table.SetTablePadding("\t") // pad with tabs
+       table.SetNoWhiteSpace(true)
+
+       var data [][]string
+       addLine := func(prefix string, value interface{}) {
+               data = append(data, []string{
+                       prefix,
+                       whiteStyle.Render(fmt.Sprint(value)),
+               })
+       }
+
+       if !m.quitting {
+               s.WriteString(m.spinner.View())
+       } else {
+               if m.current.Complete {
+                       if m.current.Replicate.ObjectsFailed == 0 {
+                               s.WriteString(m.spinner.Style.Render((tickCell 
+ tickCell + tickCell)))
+                       } else {
+                               
s.WriteString(m.spinner.Style.Render((crossTickCell + crossTickCell + 
crossTickCell)))
+                       }
+               }
+       }
+       s.WriteString("\n")
+
+       switch m.current.JobType {
+       case string(madmin.BatchJobReplicate):
+               accElapsedTime := m.current.LastUpdate.Sub(m.current.StartTime)
+
+               addLine("JobType: ", m.current.JobType)
+               addLine("Objects: ", m.current.Replicate.Objects)
+               addLine("Versions: ", m.current.Replicate.Objects)
+               addLine("FailedObjects: ", m.current.Replicate.ObjectsFailed)
+               if accElapsedTime > 0 {
+                       bytesTransferredPerSec := 
float64(int64(time.Second)*m.current.Replicate.BytesTransferred) / 
float64(accElapsedTime)
+                       objectsPerSec := 
float64(int64(time.Second)*m.current.Replicate.Objects) / 
float64(accElapsedTime)
+                       addLine("Throughput: ", fmt.Sprintf("%s/s", 
humanize.IBytes(uint64(bytesTransferredPerSec))))
+                       addLine("IOPs: ", fmt.Sprintf("%.2f objs/s", 
objectsPerSec))
+               }
+               addLine("Transferred: ", fmt.Sprintf("%s", 
humanize.IBytes(uint64(m.current.Replicate.BytesTransferred))))
+               addLine("Elapsed: ", fmt.Sprintf("%s", accElapsedTime))
+               addLine("CurrObjName: ", m.current.Replicate.Object)
+       }
+
+       table.AppendBulk(data)
+       table.Render()
+
+       if m.quitting {
+               s.WriteString("\n")
+       }
+       return s.String()
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/config-fix.go 
new/mc-20221009T211059Z/cmd/config-fix.go
--- old/mc-20221001T075614Z/cmd/config-fix.go   2022-10-01 09:56:14.000000000 
+0200
+++ new/mc-20221009T211059Z/cmd/config-fix.go   2022-10-09 23:10:59.000000000 
+0200
@@ -49,7 +49,7 @@
        Version string
 }
 
-/////////////////// Broken Config V3 ///////////////////
+// ///////////////// Broken Config V3 ///////////////////
 type brokenHostConfigV3 struct {
        AccessKeyID     string
        SecretAccessKey string
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/config-old.go 
new/mc-20221009T211059Z/cmd/config-old.go
--- old/mc-20221001T075614Z/cmd/config-old.go   2022-10-01 09:56:14.000000000 
+0200
+++ new/mc-20221009T211059Z/cmd/config-old.go   2022-10-09 23:10:59.000000000 
+0200
@@ -17,7 +17,7 @@
 
 package cmd
 
-/////////////////// Config V1 ///////////////////
+// ///////////////// Config V1 ///////////////////
 type hostConfigV1 struct {
        AccessKeyID     string
        SecretAccessKey string
@@ -40,7 +40,7 @@
        return conf
 }
 
-/////////////////// Config V101 ///////////////////
+// ///////////////// Config V101 ///////////////////
 type hostConfigV101 hostConfigV1
 
 type configV101 struct {
@@ -58,7 +58,7 @@
        return conf
 }
 
-/////////////////// Config V2 ///////////////////
+// ///////////////// Config V2 ///////////////////
 type hostConfigV2 hostConfigV1
 
 type configV2 struct {
@@ -76,7 +76,7 @@
        return conf
 }
 
-/////////////////// Config V3 ///////////////////
+// ///////////////// Config V3 ///////////////////
 type hostConfigV3 struct {
        AccessKeyID     string `json:"access-key-id"`
        SecretAccessKey string `json:"secret-access-key"`
@@ -97,7 +97,7 @@
        return conf
 }
 
-/////////////////// Config V4 ///////////////////
+// ///////////////// Config V4 ///////////////////
 type hostConfigV4 struct {
        AccessKeyID     string `json:"accessKeyId"`
        SecretAccessKey string `json:"secretAccessKey"`
@@ -118,7 +118,7 @@
        return conf
 }
 
-/////////////////// Config V5 ///////////////////
+// ///////////////// Config V5 ///////////////////
 type hostConfigV5 struct {
        AccessKeyID     string `json:"accessKeyId"`
        SecretAccessKey string `json:"secretAccessKey"`
@@ -139,7 +139,7 @@
        return conf
 }
 
-/////////////////// Config V6 ///////////////////
+// ///////////////// Config V6 ///////////////////
 type hostConfigV6 struct {
        AccessKeyID     string `json:"accessKeyId"`
        SecretAccessKey string `json:"secretAccessKey"`
@@ -161,7 +161,7 @@
        return conf
 }
 
-/////////////////// Config V6 ///////////////////
+// ///////////////// Config V6 ///////////////////
 // hostConfig configuration of a host - version '7'.
 type hostConfigV7 struct {
        URL       string `json:"url"`
@@ -241,7 +241,7 @@
        }
 }
 
-/////////////////// Config V8 ///////////////////
+// ///////////////// Config V8 ///////////////////
 // configV8 config version.
 // hostConfig configuration of a host.
 type hostConfigV8 struct {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/find.go 
new/mc-20221009T211059Z/cmd/find.go
--- old/mc-20221001T075614Z/cmd/find.go 2022-10-01 09:56:14.000000000 +0200
+++ new/mc-20221009T211059Z/cmd/find.go 2022-10-09 23:10:59.000000000 +0200
@@ -58,19 +58,23 @@
 // also proceed to look for similar strings alone and print it.
 //
 // pattern:
-//     { term }
+//
+//     { term }
+//
 // term:
-//     '*'         matches any sequence of non-Separator characters
-//     '?'         matches any single non-Separator character
-//     '[' [ '^' ] { character-range } ']'
-//                 character class (must be non-empty)
-//     c           matches character c (c != '*', '?', '\\', '[')
-//     '\\' c      matches character c
+//
+//     '*'         matches any sequence of non-Separator characters
+//     '?'         matches any single non-Separator character
+//     '[' [ '^' ] { character-range } ']'
+//                 character class (must be non-empty)
+//     c           matches character c (c != '*', '?', '\\', '[')
+//     '\\' c      matches character c
+//
 // character-range:
-//     c           matches character c (c != '\\', '-', ']')
-//     '\\' c      matches character c
-//     lo '-' hi   matches character c for lo <= c <= hi
 //
+//     c           matches character c (c != '\\', '-', ']')
+//     '\\' c      matches character c
+//     lo '-' hi   matches character c for lo <= c <= hi
 func nameMatch(pattern, path string) bool {
        matched, e := filepath.Match(pattern, filepath.Base(path))
        errorIf(probe.NewError(e).Trace(pattern, path), "Unable to match with 
input pattern.")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/license-info.go 
new/mc-20221009T211059Z/cmd/license-info.go
--- old/mc-20221001T075614Z/cmd/license-info.go 2022-10-01 09:56:14.000000000 
+0200
+++ new/mc-20221009T211059Z/cmd/license-info.go 2022-10-09 23:10:59.000000000 
+0200
@@ -36,7 +36,7 @@
        OnUsageError: onUsageError,
        Action:       mainLicenseInfo,
        Before:       setGlobalsFromContext,
-       Flags:        append(globalFlags, subnetCommonFlags...),
+       Flags:        append(supportGlobalFlags, subnetCommonFlags...),
        CustomHelpTemplate: `NAME:
   {{.HelpName}} - {{.Usage}}
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/license-register.go 
new/mc-20221009T211059Z/cmd/license-register.go
--- old/mc-20221001T075614Z/cmd/license-register.go     2022-10-01 
09:56:14.000000000 +0200
+++ new/mc-20221009T211059Z/cmd/license-register.go     2022-10-09 
23:10:59.000000000 +0200
@@ -28,7 +28,10 @@
        "github.com/minio/pkg/console"
 )
 
-const licRegisterMsgTag = "licenseRegisterMessage"
+const (
+       licRegisterMsgTag  = "licenseRegisterMessage"
+       licRegisterLinkTag = "licenseRegisterLink"
+)
 
 var licenseRegisterFlags = append([]cli.Flag{
        cli.StringFlag{
@@ -83,12 +86,12 @@
        var msg string
        switch li.Type {
        case "online":
-               msg = fmt.Sprintf("%s %s successfully.", li.Alias, li.Action)
+               msg = console.Colorize(licRegisterMsgTag, fmt.Sprintf("%s %s 
successfully.", li.Alias, li.Action))
        case "offline":
                msg = fmt.Sprintln("Open the following URL in the browser to 
register", li.Alias, "on SUBNET:")
-               msg += li.URL
+               msg = console.Colorize(licRegisterMsgTag, msg) + 
console.Colorize(licRegisterLinkTag, li.URL)
        }
-       return console.Colorize(licRegisterMsgTag, msg)
+       return msg
 }
 
 // JSON jsonified license register message
@@ -148,6 +151,7 @@
 
 func mainLicenseRegister(ctx *cli.Context) error {
        console.SetColor(licRegisterMsgTag, color.New(color.FgGreen, 
color.Bold))
+       console.SetColor(licRegisterLinkTag, color.New(color.FgWhite, 
color.Bold))
        checkLicenseRegisterSyntax(ctx)
 
        // Get the alias parameter from cli
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/license-update.go 
new/mc-20221009T211059Z/cmd/license-update.go
--- old/mc-20221001T075614Z/cmd/license-update.go       2022-10-01 
09:56:14.000000000 +0200
+++ new/mc-20221009T211059Z/cmd/license-update.go       2022-10-09 
23:10:59.000000000 +0200
@@ -35,7 +35,7 @@
        OnUsageError: onUsageError,
        Action:       mainLicenseUpdate,
        Before:       setGlobalsFromContext,
-       Flags:        append(globalFlags, subnetCommonFlags...),
+       Flags:        append(supportGlobalFlags, subnetCommonFlags...),
        CustomHelpTemplate: `NAME:
   {{.HelpName}} - {{.Usage}}
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/main.go 
new/mc-20221009T211059Z/cmd/main.go
--- old/mc-20221001T075614Z/cmd/main.go 2022-10-01 09:56:14.000000000 +0200
+++ new/mc-20221009T211059Z/cmd/main.go 2022-10-09 23:10:59.000000000 +0200
@@ -457,6 +457,7 @@
        readyCmd,
        pingCmd,
        odCmd,
+       batchCmd,
 }
 
 func printMCVersion(c *cli.Context) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/mirror-main.go 
new/mc-20221009T211059Z/cmd/mirror-main.go
--- old/mc-20221001T075614Z/cmd/mirror-main.go  2022-10-01 09:56:14.000000000 
+0200
+++ new/mc-20221009T211059Z/cmd/mirror-main.go  2022-10-09 23:10:59.000000000 
+0200
@@ -128,7 +128,7 @@
        }
 )
 
-//  Mirror folders recursively from a single source to many destinations
+// Mirror folders recursively from a single source to many destinations
 var mirrorCmd = cli.Command{
        Name:         "mirror",
        Usage:        "synchronize object(s) to a remote site",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/rm-main.go 
new/mc-20221009T211059Z/cmd/rm-main.go
--- old/mc-20221001T075614Z/cmd/rm-main.go      2022-10-01 09:56:14.000000000 
+0200
+++ new/mc-20221009T211059Z/cmd/rm-main.go      2022-10-09 23:10:59.000000000 
+0200
@@ -390,9 +390,10 @@
 }
 
 // listAndRemove uses listing before removal, it can list recursively or not, 
with versions or not.
-//   Use cases:
-//      * Remove objects recursively
-//      * Remove all versions of a single object
+//
+//     Use cases:
+//        * Remove objects recursively
+//        * Remove all versions of a single object
 func listAndRemove(url string, opts removeOpts) error {
        ctx, cancelRemove := context.WithCancel(globalContext)
        defer cancelRemove()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/session-old.go 
new/mc-20221009T211059Z/cmd/session-old.go
--- old/mc-20221001T075614Z/cmd/session-old.go  2022-10-01 09:56:14.000000000 
+0200
+++ new/mc-20221009T211059Z/cmd/session-old.go  2022-10-09 23:10:59.000000000 
+0200
@@ -26,7 +26,7 @@
        "github.com/minio/pkg/quick"
 )
 
-/////////////////// Session V6 ///////////////////
+// ///////////////// Session V6 ///////////////////
 // sessionV6Header for resumable sessions.
 type sessionV6Header struct {
        Version            string            `json:"version"`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/term-pager.go 
new/mc-20221009T211059Z/cmd/term-pager.go
--- old/mc-20221001T075614Z/cmd/term-pager.go   2022-10-01 09:56:14.000000000 
+0200
+++ new/mc-20221009T211059Z/cmd/term-pager.go   2022-10-09 23:10:59.000000000 
+0200
@@ -123,7 +123,6 @@
        go func() {
                tp.teaPager = tea.NewProgram(
                        tp.model,
-                       tea.WithAltScreen(),
                )
 
                go func() {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/cmd/update-main.go 
new/mc-20221009T211059Z/cmd/update-main.go
--- old/mc-20221001T075614Z/cmd/update-main.go  2022-10-01 09:56:14.000000000 
+0200
+++ new/mc-20221009T211059Z/cmd/update-main.go  2022-10-09 23:10:59.000000000 
+0200
@@ -155,8 +155,7 @@
 //
 // https://github.com/moby/moby/blob/master/daemon/initlayer/setup_unix.go#L25
 //
-//     "/.dockerenv":      "file",
-//
+//     "/.dockerenv":      "file",
 func IsDocker() bool {
        _, e := os.Stat("/.dockerenv")
        if os.IsNotExist(e) {
@@ -192,7 +191,7 @@
 // DO NOT CHANGE USER AGENT STYLE.
 // The style should be
 //
-//   mc (<OS>; <ARCH>[; dcos][; kubernetes][; docker][; source]) mc/<VERSION> 
mc/<RELEASE-TAG> mc/<COMMIT-ID>
+//     mc (<OS>; <ARCH>[; dcos][; kubernetes][; docker][; source]) 
mc/<VERSION> mc/<RELEASE-TAG> mc/<COMMIT-ID>
 //
 // Any change here should be discussed by opening an issue at
 // https://github.com/minio/mc/issues.
@@ -320,9 +319,13 @@
                return fmt.Sprintf("docker pull minio/mc:%s", releaseTag)
        }
 
+       if customReleaseURL == "" {
+               return mcReleaseURL + "archive/mc." + releaseTag
+       }
+
        u, err := url.Parse(customReleaseURL)
        if err != nil {
-               return mcReleaseURL + "archive/" + "mc." + releaseTag
+               return mcReleaseURL + "archive/mc." + releaseTag
        }
 
        u.Path = path.Dir(u.Path) + "/mc." + releaseTag
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/go.mod 
new/mc-20221009T211059Z/go.mod
--- old/mc-20221001T075614Z/go.mod      2022-10-01 09:56:14.000000000 +0200
+++ new/mc-20221009T211059Z/go.mod      2022-10-09 23:10:59.000000000 +0200
@@ -1,9 +1,9 @@
 module github.com/minio/mc
 
-go 1.17
+go 1.18
 
 require (
-       github.com/charmbracelet/bubbletea v0.19.3
+       github.com/charmbracelet/bubbletea v0.22.1
        github.com/cheggaaa/pb v1.0.29
        github.com/dustin/go-humanize v1.0.0
        github.com/fatih/color v1.13.0
@@ -15,14 +15,14 @@
        github.com/json-iterator/go v1.1.12
        github.com/klauspost/compress v1.15.9
        github.com/mattn/go-ieproxy v0.0.1
-       github.com/mattn/go-isatty v0.0.14
+       github.com/mattn/go-isatty v0.0.16
        github.com/minio/cli v1.24.0
        github.com/minio/colorjson v1.0.2
        github.com/minio/filepath v1.0.0
-       github.com/minio/madmin-go v1.5.2
+       github.com/minio/madmin-go v1.6.0
        github.com/minio/md5-simd v1.1.2 // indirect
        github.com/minio/minio-go/v7 v7.0.40-0.20220928095841-8848d8affe8a
-       github.com/minio/pkg v1.4.1
+       github.com/minio/pkg v1.4.5
        github.com/minio/selfupdate v0.4.0
        github.com/minio/sha256-simd v1.0.0
        github.com/mitchellh/go-homedir v1.1.0
@@ -60,7 +60,7 @@
 require (
        github.com/beorn7/perks v1.0.1 // indirect
        github.com/cespare/xxhash/v2 v2.1.2 // indirect
-       github.com/containerd/console v1.0.2 // indirect
+       github.com/containerd/console v1.0.3 // indirect
        github.com/coreos/go-semver v0.3.0 // indirect
        github.com/coreos/go-systemd/v22 v22.3.2 // indirect
        github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
@@ -81,12 +81,14 @@
        github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
        github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // 
indirect
        github.com/mattn/go-colorable v0.1.12 // indirect
+       github.com/mattn/go-localereader v0.0.1 // indirect
        github.com/mattn/go-runewidth v0.0.13 // indirect
        github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // 
indirect
        github.com/modern-go/reflect2 v1.0.2 // indirect
        github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b // indirect
-       github.com/muesli/termenv v0.11.1-0.20220204035834-5ac8409525e0 // 
indirect
+       github.com/muesli/cancelreader v0.2.2 // indirect
+       github.com/muesli/termenv v0.11.1-0.20220212125758-44cd13922739 // 
indirect
        github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // 
indirect
        github.com/philhofer/fwd v1.1.2-0.20210722190033-5c56ac6d0bb9 // 
indirect
        github.com/pkg/errors v0.9.1 // indirect
@@ -107,7 +109,7 @@
        go.uber.org/multierr v1.8.0 // indirect
        go.uber.org/zap v1.21.0 // indirect
        golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
-       golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect
+       golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect
        google.golang.org/genproto v0.0.0-20220302033224-9aa15565e42a // 
indirect
        google.golang.org/grpc v1.44.0 // indirect
        google.golang.org/protobuf v1.27.1 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/go.sum 
new/mc-20221009T211059Z/go.sum
--- old/mc-20221001T075614Z/go.sum      2022-10-01 09:56:14.000000000 +0200
+++ new/mc-20221009T211059Z/go.sum      2022-10-09 23:10:59.000000000 +0200
@@ -64,8 +64,9 @@
 github.com/cespare/xxhash/v2 v2.1.2/go.mod 
h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/charmbracelet/bubbles v0.10.0 
h1:ZYqBwnmFGp91HSRRbhxKq5jr6bUPsVUBdkrGGWtv0Wk=
 github.com/charmbracelet/bubbles v0.10.0/go.mod 
h1:4tiDrWzH1MTD4t5NnrcthaedmI3MxU0FIutax7//dvk=
-github.com/charmbracelet/bubbletea v0.19.3 
h1:OKeO/Y13rQQqt4snX+lePB0QrnW80UdrMNolnCcmoAw=
 github.com/charmbracelet/bubbletea v0.19.3/go.mod 
h1:VuXF2pToRxDUHcBUcPmCRUHRvFATM4Ckb/ql1rBl3KA=
+github.com/charmbracelet/bubbletea v0.22.1 
h1:z66q0LWdJNOWEH9zadiAIXp2GN1AWrwNXU8obVY9X24=
+github.com/charmbracelet/bubbletea v0.22.1/go.mod 
h1:8/7hVvbPN6ZZPkczLiB8YpLkLJ0n7DMho5Wvfd2X1C0=
 github.com/charmbracelet/harmonica v0.1.0/go.mod 
h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao=
 github.com/charmbracelet/lipgloss v0.3.0/go.mod 
h1:VkhdBS2eNAmRkTwRKLJCFhCOVkjntMusBDxv7TXahuk=
 github.com/charmbracelet/lipgloss v0.4.1-0.20220204041308-bf2912e703f6 
h1:IO2ebJMUU2hixsAEBb80TyLTQQEqXIomwzd61rGzzAk=
@@ -83,8 +84,9 @@
 github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/containerd/console v1.0.2 
h1:Pi6D+aZXM+oUw1czuKgH5IJ+y0jhYcwBJfx5/Ghn9dE=
 github.com/containerd/console v1.0.2/go.mod 
h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ=
+github.com/containerd/console v1.0.3 
h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw=
+github.com/containerd/console v1.0.3/go.mod 
h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
 github.com/coreos/go-semver v0.3.0 
h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
 github.com/coreos/go-semver v0.3.0/go.mod 
h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-systemd/v22 v22.3.2 
h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
@@ -318,8 +320,11 @@
 github.com/mattn/go-isatty v0.0.11/go.mod 
h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
 github.com/mattn/go-isatty v0.0.12/go.mod 
h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
 github.com/mattn/go-isatty v0.0.13/go.mod 
h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
-github.com/mattn/go-isatty v0.0.14 
h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
 github.com/mattn/go-isatty v0.0.14/go.mod 
h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
+github.com/mattn/go-isatty v0.0.16 
h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
+github.com/mattn/go-isatty v0.0.16/go.mod 
h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
+github.com/mattn/go-localereader v0.0.1 
h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
+github.com/mattn/go-localereader v0.0.1/go.mod 
h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
 github.com/mattn/go-runewidth v0.0.4/go.mod 
h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-runewidth v0.0.9/go.mod 
h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
 github.com/mattn/go-runewidth v0.0.10/go.mod 
h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
@@ -337,8 +342,8 @@
 github.com/minio/filepath v1.0.0 
h1:fvkJu1+6X+ECRA6G3+JJETj4QeAYO9sV43I79H8ubDY=
 github.com/minio/filepath v1.0.0/go.mod 
h1:/nRZA2ldl5z6jT9/KQuvZcQlxZIMQoFFQPvEXx9T/Bw=
 github.com/minio/madmin-go v1.3.5/go.mod 
h1:vGKGboQgGIWx4DuDUaXixjlIEZOCIp6ivJkQoiVaACc=
-github.com/minio/madmin-go v1.5.2 
h1:GRhnQO9fa+OQX+VgksLzR//ZkYWd5NB74UDY/7rQzRw=
-github.com/minio/madmin-go v1.5.2/go.mod 
h1:ez87VmMtsxP7DRxjKJKD4RDNW+nhO2QF9KSzwxBDQ98=
+github.com/minio/madmin-go v1.6.0 
h1:ut2rCN5Aw5dhAJ8UIQ8appF1A/+fpSD9Alg2p+huab0=
+github.com/minio/madmin-go v1.6.0/go.mod 
h1:ez87VmMtsxP7DRxjKJKD4RDNW+nhO2QF9KSzwxBDQ98=
 github.com/minio/md5-simd v1.1.0/go.mod 
h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
 github.com/minio/md5-simd v1.1.2 
h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
 github.com/minio/md5-simd v1.1.2/go.mod 
h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
@@ -346,8 +351,8 @@
 github.com/minio/minio-go/v7 v7.0.40-0.20220928095841-8848d8affe8a 
h1:COFh7S3tOKmJNYtKKFAuHQFH7MAaXxg4aAluXC9KQgc=
 github.com/minio/minio-go/v7 v7.0.40-0.20220928095841-8848d8affe8a/go.mod 
h1:nCrRzjoSUQh8hgKKtu3Y708OLvRLtuASMg2/nvmbarw=
 github.com/minio/pkg v1.1.20/go.mod 
h1:Xo7LQshlxGa9shKwJ7NzQbgW4s8T/Wc1cOStR/eUiMY=
-github.com/minio/pkg v1.4.1 h1:GXDy/CQ/NVxZ75dhAjM/5T2USWXAzoj6mXSXnD/vfgg=
-github.com/minio/pkg v1.4.1/go.mod 
h1:mxCLAG+fOGIQr6odQ5Ukqc6qv9Zj6v1d6TD3NP82B7Y=
+github.com/minio/pkg v1.4.5 h1:XE3o8XWc+oQSs9LXLtImfRrAfxRfI3dq9tJ0PerhOk8=
+github.com/minio/pkg v1.4.5/go.mod 
h1:mxCLAG+fOGIQr6odQ5Ukqc6qv9Zj6v1d6TD3NP82B7Y=
 github.com/minio/selfupdate v0.4.0 
h1:A7t07pN4Ch1tBTIRStW0KhUVyykz+2muCqFsITQeEW8=
 github.com/minio/selfupdate v0.4.0/go.mod 
h1:mcDkzMgq8PRcpCRJo/NlPY7U45O5dfYl2Y0Rg7IustY=
 github.com/minio/sha256-simd v0.1.1/go.mod 
h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
@@ -373,13 +378,16 @@
 github.com/montanaflynn/stats v0.6.6/go.mod 
h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
 github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b 
h1:1XF24mVaiu7u+CFywTdcDo2ie1pzzhwjt6RHqzpMU34=
 github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b/go.mod 
h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho=
+github.com/muesli/cancelreader v0.2.2 
h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
+github.com/muesli/cancelreader v0.2.2/go.mod 
h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
 github.com/muesli/reflow v0.2.1-0.20210115123740-9e1d0d53df68/go.mod 
h1:Xk+z4oIWdQqJzsxyjgl3P22oYZnHdZ8FFTHAQQt5BMQ=
 github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
 github.com/muesli/reflow v0.3.0/go.mod 
h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
 github.com/muesli/termenv v0.8.1/go.mod 
h1:kzt/D/4a88RoheZmwfqorY3A+tnsSMA9HJC/fQSFKo0=
 github.com/muesli/termenv v0.9.0/go.mod 
h1:R/LzAKf+suGs4IsO95y7+7DpFHO0KABgnZqtlyx2mBw=
-github.com/muesli/termenv v0.11.1-0.20220204035834-5ac8409525e0 
h1:STjmj0uFfRryL9fzRA/OupNppeAID6QJYPMavTL7jtY=
 github.com/muesli/termenv v0.11.1-0.20220204035834-5ac8409525e0/go.mod 
h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs=
+github.com/muesli/termenv v0.11.1-0.20220212125758-44cd13922739 
h1:QANkGiGr39l1EESqrE0gZw0/AJNYzIvoGLhIoVYtluI=
+github.com/muesli/termenv v0.11.1-0.20220212125758-44cd13922739/go.mod 
h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod 
h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod 
h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/navidys/tvxwidgets v0.1.0 
h1:cY9pU5ww+hbpwMAYC2eTEX5tKF3KD/ku7gu/XMnSulk=
@@ -727,12 +735,13 @@
 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f 
h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
-golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab 
h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU=
+golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod 
h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod 
h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod 
h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mc-20221001T075614Z/pkg/probe/probe.go 
new/mc-20221009T211059Z/pkg/probe/probe.go
--- old/mc-20221001T075614Z/pkg/probe/probe.go  2022-10-01 09:56:14.000000000 
+0200
+++ new/mc-20221009T211059Z/pkg/probe/probe.go  2022-10-09 23:10:59.000000000 
+0200
@@ -52,8 +52,9 @@
 
 // SetAppInfo sets app speific key:value to report additionally during call 
trace dump.
 // Eg. SetAppInfo("ReleaseTag", "RELEASE_42_0")
-//     SetAppInfo("Version", "42.0")
-//     SetAppInfo("Commit", "00611fb")
+//
+//     SetAppInfo("Version", "42.0")
+//     SetAppInfo("Commit", "00611fb")
 func SetAppInfo(key, value string) {
        appInfo[key] = value
 }
@@ -96,23 +97,22 @@
 }
 
 // NewError function instantiates an error probe for tracing.
-// Default ``error`` (golang's error interface) is injected in
+// Default ???error??? (golang's error interface) is injected in
 // only once. Rest of the time, you trace the return path with
-// ``probe.Trace`` and finally handling them at top level
+// ???probe.Trace??? and finally handling them at top level
 //
 // Following dummy code talks about how one can pass up the
 // errors and put them in CallTrace.
 //
-//     func sendError() *probe.Error {
-//          return probe.NewError(errors.New("Help Needed"))
-//     }
-//     func recvError() *probe.Error {
-//          return sendError().Trace()
-//     }
-//     if err := recvError(); err != nil {
-//           log.Fatalln(err.Trace())
-//     }
-//
+//     func sendError() *probe.Error {
+//          return probe.NewError(errors.New("Help Needed"))
+//     }
+//     func recvError() *probe.Error {
+//          return sendError().Trace()
+//     }
+//     if err := recvError(); err != nil {
+//           log.Fatalln(err.Trace())
+//     }
 func NewError(e error) *Error {
        if e == nil {
                return nil

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/minio-client/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.minio-client.new.2275/vendor.tar.gz differ: char 5, 
line 1

Reply via email to