0d073ef687ab3c33122aff049ede9330c76f4e89

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

feat: generate man pages and completions

using mango-cobra

Diff

This diff is truncated to protect this page.

  1diff --git a/.gitignore b/.gitignore
  2index 0a3b2a832f5f4c6d68c447602ad9db763249c3d1..7f48767177e75ab62894454f61761e963f03f43e 100644
  3--- a/.gitignore
  4+++ b/.gitignore
  5@@ -2,4 +2,6 @@ cmd/soft/soft
  6 .ssh
  7 .repos
  8 dist
  9-testdata
 10+testdata
 11+completions/
 12+manpages/
 13diff --git a/.goreleaser.yml b/.goreleaser.yml
 14index 0c59621d718309bcc405930ca49691206a51a433..e986cb5d3166aa8ac81eb55c0455e2931d7542c8 100644
 15--- a/.goreleaser.yml
 16+++ b/.goreleaser.yml
 17@@ -1,12 +1,12 @@
 18 includes:
 19   - from_url:
 20-      url: charmbracelet/meta/main/goreleaser.yaml
 21+      url: charmbracelet/meta/main/goreleaser-full.yaml
 22 
 23 variables:
 24   main: "./cmd/soft"
 25   binary_name: soft
 26   description: "A tasty, self-hostable Git server for the command line🍦"
 27   github_url: "https://github.com/charmbracelet/soft-serve"
 28-  maintainer: "Christian Rocha <christian@charm.sh>"
 29-  brew_commit_author_name: "Christian Rocha"
 30-  brew_commit_author_email: "christian@charm.sh"
 31+  maintainer: "Ayman Bagabas <ayman@charm.sh>"
 32+  brew_commit_author_name: "Ayman Bagabas"
 33+  brew_commit_author_email: "ayman@charm.sh"
 34diff --git a/Dockerfile b/Dockerfile
 35index 589d64ba996de01c5a004abeb5e164a7a64468cb..6b451e96b2410d08c894a36396bf0c033989431f 100644
 36--- a/Dockerfile
 37+++ b/Dockerfile
 38@@ -19,4 +19,4 @@ ENV SOFT_SERVE_REPO_PATH "/soft-serve/repos"
 39 EXPOSE 23231/tcp
 40 
 41 # Set the default command
 42-ENTRYPOINT [ "/usr/local/bin/soft" ]
 43+ENTRYPOINT [ "/usr/local/bin/soft", "serve" ]
 44diff --git a/cmd/soft/main.go b/cmd/soft/main.go
 45deleted file mode 100644
 46index 160e9c73a153052b16d9fc2d255b62cc542b45aa..0000000000000000000000000000000000000000
 47--- a/cmd/soft/main.go
 48+++ /dev/null
 49@@ -1,110 +0,0 @@
 50-package main
 51-
 52-import (
 53-	"context"
 54-	"fmt"
 55-	"log"
 56-	"os"
 57-	"os/signal"
 58-	"runtime/debug"
 59-	"syscall"
 60-	"time"
 61-
 62-	"github.com/charmbracelet/soft-serve/config"
 63-	"github.com/charmbracelet/soft-serve/server"
 64-	mcobra "github.com/muesli/mango-cobra"
 65-	"github.com/muesli/roff"
 66-	"github.com/spf13/cobra"
 67-)
 68-
 69-var (
 70-	// Version contains the application version number. It's set via ldflags
 71-	// when building.
 72-	Version = ""
 73-
 74-	// CommitSHA contains the SHA of the commit that this application was built
 75-	// against. It's set via ldflags when building.
 76-	CommitSHA = ""
 77-
 78-	rootCmd = &cobra.Command{
 79-		Use:   "soft",
 80-		Short: "A self-hostable Git server for the command line",
 81-		Long:  "Soft Serve is a self-hostable Git server for the command line.",
 82-		RunE: func(cmd *cobra.Command, args []string) error {
 83-			return cmd.Help()
 84-		},
 85-	}
 86-
 87-	serveCmd = &cobra.Command{
 88-		Use:   "serve",
 89-		Short: "Start the server",
 90-		Long:  "Start the server",
 91-		Args:  cobra.NoArgs,
 92-		RunE: func(cmd *cobra.Command, args []string) error {
 93-			cfg := config.DefaultConfig()
 94-			s := server.NewServer(cfg)
 95-
 96-			done := make(chan os.Signal, 1)
 97-			signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
 98-
 99-			log.Printf("Starting SSH server on %s:%d", cfg.BindAddr, cfg.Port)
100-			go func() {
101-				if err := s.Start(); err != nil {
102-					log.Fatalln(err)
103-				}
104-			}()
105-
106-			<-done
107-
108-			log.Printf("Stopping SSH server on %s:%d", cfg.BindAddr, cfg.Port)
109-			ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
110-			defer func() { cancel() }()
111-			return s.Shutdown(ctx)
112-		},
113-	}
114-
115-	manCmd = &cobra.Command{
116-		Use:    "man",
117-		Short:  "Generate man pages",
118-		Args:   cobra.NoArgs,
119-		Hidden: true,
120-		RunE: func(cmd *cobra.Command, args []string) error {
121-			manPage, err := mcobra.NewManPage(1, rootCmd) //.
122-			if err != nil {
123-				return err
124-			}
125-
126-			manPage = manPage.WithSection("Copyright", "(C) 2021-2022 Charmbracelet, Inc.\n"+
127-				"Released under MIT license.")
128-			fmt.Println(manPage.Build(roff.NewDocument()))
129-			return nil
130-		},
131-	}
132-)
133-
134-func init() {
135-	rootCmd.AddCommand(
136-		serveCmd,
137-		manCmd,
138-	)
139-	rootCmd.CompletionOptions.HiddenDefaultCmd = true
140-
141-	if len(CommitSHA) >= 7 {
142-		vt := rootCmd.VersionTemplate()
143-		rootCmd.SetVersionTemplate(vt[:len(vt)-1] + " (" + CommitSHA[0:7] + ")\n")
144-	}
145-	if Version == "" {
146-		if info, ok := debug.ReadBuildInfo(); ok && info.Main.Sum != "" {
147-			Version = info.Main.Version
148-		} else {
149diff --git a/cmd/soft/man.go b/cmd/soft/man.go
150new file mode 100644
151index 0000000000000000000000000000000000000000..ae59fec1bafe3f201c1fe4ec3a0a4a2f3ee298a2
152--- /dev/null
153+++ b/cmd/soft/man.go
154@@ -0,0 +1,29 @@
155+package main
156+
157+import (
158+	"fmt"
159+
160+	mcobra "github.com/muesli/mango-cobra"
161+	"github.com/muesli/roff"
162+	"github.com/spf13/cobra"
163+)
164+
165+var (
166+	manCmd = &cobra.Command{
167+		Use:    "man",
168+		Short:  "Generate man pages",
169+		Args:   cobra.NoArgs,
170+		Hidden: true,
171+		RunE: func(cmd *cobra.Command, args []string) error {
172+			manPage, err := mcobra.NewManPage(1, rootCmd) //.
173+			if err != nil {
174+				return err
175+			}
176+
177+			manPage = manPage.WithSection("Copyright", "(C) 2021-2022 Charmbracelet, Inc.\n"+
178+				"Released under MIT license.")
179+			fmt.Println(manPage.Build(roff.NewDocument()))
180+			return nil
181+		},
182+	}
183+)
184diff --git a/cmd/soft/root.go b/cmd/soft/root.go
185new file mode 100644
186index 0000000000000000000000000000000000000000..6a536f228ad45f575beed27782f3bb4df83cbf20
187--- /dev/null
188+++ b/cmd/soft/root.go
189@@ -0,0 +1,54 @@
190+package main
191+
192+import (
193+	"log"
194+	"runtime/debug"
195+
196+	"github.com/spf13/cobra"
197+)
198+
199+var (
200+	// Version contains the application version number. It's set via ldflags
201+	// when building.
202+	Version = ""
203+
204+	// CommitSHA contains the SHA of the commit that this application was built
205+	// against. It's set via ldflags when building.
206+	CommitSHA = ""
207+
208+	rootCmd = &cobra.Command{
209+		Use:   "soft",
210+		Short: "A self-hostable Git server for the command line",
211+		Long:  "Soft Serve is a self-hostable Git server for the command line.",
212+		RunE: func(cmd *cobra.Command, args []string) error {
213+			return cmd.Help()
214+		},
215+	}
216+)
217+
218+func init() {
219+	rootCmd.AddCommand(
220+		serveCmd,
221+		manCmd,
222+	)
223+	rootCmd.CompletionOptions.HiddenDefaultCmd = true
224+
225+	if len(CommitSHA) >= 7 {
226+		vt := rootCmd.VersionTemplate()
227+		rootCmd.SetVersionTemplate(vt[:len(vt)-1] + " (" + CommitSHA[0:7] + ")\n")
228+	}
229+	if Version == "" {
230+		if info, ok := debug.ReadBuildInfo(); ok && info.Main.Sum != "" {
231+			Version = info.Main.Version
232+		} else {
233+			Version = "unknown (built from source)"
234+		}
235+	}
236+	rootCmd.Version = Version
237+}
238+
239+func main() {
240+	if err := rootCmd.Execute(); err != nil {
241+		log.Fatalln(err)
242+	}
243+}
244diff --git a/cmd/soft/serve.go b/cmd/soft/serve.go
245new file mode 100644
246index 0000000000000000000000000000000000000000..ecdd628744766a522b901747035c2913533858fc
247--- /dev/null
248+++ b/cmd/soft/serve.go
249@@ -0,0 +1,44 @@
250+package main
251+
252+import (
253+	"context"
254+	"log"
255+	"os"
256+	"os/signal"
257+	"syscall"
258+	"time"
259+
260+	"github.com/charmbracelet/soft-serve/config"
261+	"github.com/charmbracelet/soft-serve/server"
262+	"github.com/spf13/cobra"
263+)
264+
265+var (
266+	serveCmd = &cobra.Command{
267+		Use:   "serve",
268+		Short: "Start the server",
269+		Long:  "Start the server",
270+		Args:  cobra.NoArgs,
271+		RunE: func(cmd *cobra.Command, args []string) error {
272+			cfg := config.DefaultConfig()
273+			s := server.NewServer(cfg)
274+
275+			done := make(chan os.Signal, 1)
276+			signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
277+
278+			log.Printf("Starting SSH server on %s:%d", cfg.BindAddr, cfg.Port)
279+			go func() {
280+				if err := s.Start(); err != nil {
281+					log.Fatalln(err)
282+				}
283+			}()
284+
285+			<-done
286+
287+			log.Printf("Stopping SSH server on %s:%d", cfg.BindAddr, cfg.Port)
288+			ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
289+			defer func() { cancel() }()
290+			return s.Shutdown(ctx)
291+		},
292+	}
293+)
294diff --git a/go.mod b/go.mod
295index 088bc2e6793f050084d73f210349365c9b2b56fa..ffc7aed12ac21ebb49549ca399fd16bc2f1e7789 100755
296--- a/go.mod
297+++ b/go.mod
298@@ -5,10 +5,10 @@ go 1.17
299 require (
300 	github.com/alecthomas/chroma v0.10.0
301 	github.com/caarlos0/env/v6 v6.9.1
302-	github.com/charmbracelet/bubbles v0.10.4-0.20220302223835-88562515cf7b
303-	github.com/charmbracelet/bubbletea v0.20.0
304+	github.com/charmbracelet/bubbles v0.11.0
305+	github.com/charmbracelet/bubbletea v0.22.0
306 	github.com/charmbracelet/glamour v0.4.0
307-	github.com/charmbracelet/lipgloss v0.4.0
308+	github.com/charmbracelet/lipgloss v0.5.0
309 	github.com/charmbracelet/wish v0.5.0
310 	github.com/dustin/go-humanize v1.0.0
311 	github.com/gliderlabs/ssh v0.3.4
312@@ -16,7 +16,7 @@ require (
313 	github.com/go-git/go-git/v5 v5.4.3-0.20210630082519-b4368b2a2ca4
314 	github.com/matryer/is v1.4.0
315 	github.com/muesli/reflow v0.3.0
316-	github.com/muesli/termenv v0.11.1-0.20220212125758-44cd13922739
317+	github.com/muesli/termenv v0.12.0
318 	github.com/sergi/go-diff v1.1.0
319 	golang.org/x/crypto v0.0.0-20220307211146-efcb8507fb70
320 )
321@@ -56,6 +56,7 @@ require (
322 	github.com/microcosm-cc/bluemonday v1.0.17 // indirect
323 	github.com/mitchellh/go-homedir v1.1.0 // indirect
324 	github.com/muesli/ansi v0.0.0-20211031195517-c9f0611b6c70 // indirect
325+	github.com/muesli/cancelreader v0.2.1 // indirect
326 	github.com/muesli/mango v0.1.0 // indirect
327 	github.com/muesli/mango-pflag v0.1.0 // indirect
328 	github.com/olekukonko/tablewriter v0.0.5 // indirect
329@@ -66,7 +67,7 @@ require (
330 	github.com/yuin/goldmark v1.4.4 // indirect
331 	github.com/yuin/goldmark-emoji v1.0.1 // indirect
332 	golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect
333-	golang.org/x/sys v0.0.0-20220111092808-5a964db01320 // indirect
334+	golang.org/x/sys v0.0.0-20220209214540-3681064d5158 // indirect
335 	golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
336 	gopkg.in/warnings.v0 v0.1.2 // indirect
337 )
338diff --git a/go.sum b/go.sum
339index a5d68d44bd3e096ed599fb98129367b28bb08514..33dfda0d298ab4e4aecf23c4bf0868352a12a29f 100644
340--- a/go.sum
341+++ b/go.sum
342@@ -24,21 +24,22 @@ github.com/caarlos0/env/v6 v6.9.1/go.mod h1:hvp/ryKXKipEkcuYjs9mI4bBCg+UI0Yhgm5Z
343 github.com/caarlos0/sshmarshal v0.0.0-20220308164159-9ddb9f83c6b3/go.mod h1:7Pd/0mmq9x/JCzKauogNjSQEhivBclCQHfr9dlpDIyA=
344 github.com/caarlos0/sshmarshal v0.1.0 h1:zTCZrDORFfWh526Tsb7vCm3+Yg/SfW/Ub8aQDeosk0I=
345 github.com/caarlos0/sshmarshal v0.1.0/go.mod h1:7Pd/0mmq9x/JCzKauogNjSQEhivBclCQHfr9dlpDIyA=
346-github.com/charmbracelet/bubbles v0.10.4-0.20220302223835-88562515cf7b h1:o+LFpRn1fXtu1hDJLtBFjp7tMZ8AqwSpl84w1TnUj0Y=
347-github.com/charmbracelet/bubbles v0.10.4-0.20220302223835-88562515cf7b/go.mod h1:jOA+DUF1rjZm7gZHcNyIVW+YrBPALKfpGVdJu8UiJsA=
348-github.com/charmbracelet/bubbletea v0.19.3/go.mod h1:VuXF2pToRxDUHcBUcPmCRUHRvFATM4Ckb/ql1rBl3KA=
349-github.com/charmbracelet/bubbletea v0.20.0 h1:/b8LEPgCbNr7WWZ2LuE/BV1/r4t5PyYJtDb+J3vpwxc=
350+github.com/charmbracelet/bubbles v0.11.0 h1:fBLyY0PvJnd56Vlu5L84JJH6f4axhgIJ9P3NET78f0Q=
351+github.com/charmbracelet/bubbles v0.11.0/go.mod h1:bbeTiXwPww4M031aGi8UK2HT9RDWoiNibae+1yCMtcc=
352 github.com/charmbracelet/bubbletea v0.20.0/go.mod h1:zpkze1Rioo4rJELjRyGlm9T2YNou1Fm4LIJQSa5QMEM=
353+github.com/charmbracelet/bubbletea v0.21.0/go.mod h1:GgmJMec61d08zXsOhqRC/AiOx4K4pmz+VIcRIm1FKr4=
354+github.com/charmbracelet/bubbletea v0.22.0 h1:E1BTNSE3iIrq0G0X6TjGAmrQ32cGCbFDPcIuImikrUc=
355+github.com/charmbracelet/bubbletea v0.22.0/go.mod h1:aoVIwlNlr5wbCB26KhxfrqAn0bMp4YpJcoOelbxApjs=
356 github.com/charmbracelet/glamour v0.4.0 h1:scR+smyB7WdmrlIaff6IVlm48P48JaNM7JypM/VGl4k=
357 github.com/charmbracelet/glamour v0.4.0/go.mod h1:9ZRtG19AUIzcTm7FGLGbq3D5WKQ5UyZBbQsMQN0XIqc=
358-github.com/charmbracelet/harmonica v0.1.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao=
359+github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao=
360 github.com/charmbracelet/keygen v0.3.0 h1:mXpsQcH7DDlST5TddmXNXjS0L7ECk4/kLQYyBcsan2Y=
361 github.com/charmbracelet/keygen v0.3.0/go.mod h1:1ukgO8806O25lUZ5s0IrNur+RlwTBERlezdgW71F5rM=
362-github.com/charmbracelet/lipgloss v0.4.0 h1:768h64EFkGUr8V5yAKV7/Ta0NiVceiPaV+PphaW1K9g=
363 github.com/charmbracelet/lipgloss v0.4.0/go.mod h1:vmdkHvce7UzX6xkyf4cca8WlwdQ5RQr8fzta+xl7BOM=
364+github.com/charmbracelet/lipgloss v0.5.0 h1:lulQHuVeodSgDez+3rGiuxlPVXSnhth442DATR2/8t8=
365+github.com/charmbracelet/lipgloss v0.5.0/go.mod h1:EZLha/HbzEt7cYqdFPovlqy5FZPj0xFhg5SaqxScmgs=
366 github.com/charmbracelet/wish v0.5.0 h1:FkkdNBFqrLABR1ciNrAL2KCxoyWfKhXnIGZw6GfAtPg=
367 github.com/charmbracelet/wish v0.5.0/go.mod h1:5GAn5SrDSZ7cgKjnC+3kDmiIo7I6k4/AYiRzC4+tpCk=
368-github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ=
369 github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw=
370 github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
371 github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
372@@ -120,6 +121,9 @@ github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk
373 github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b/go.mod h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho=
374 github.com/muesli/ansi v0.0.0-20211031195517-c9f0611b6c70 h1:kMlmsLSbjkikxQJ1IPwaM+7LJ9ltFu/fi8CRzvSnQmA=
375 github.com/muesli/ansi v0.0.0-20211031195517-c9f0611b6c70/go.mod h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho=
376+github.com/muesli/cancelreader v0.2.0/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
377+github.com/muesli/cancelreader v0.2.1 h1:Xzd1B4U5bWQOuSKuN398MyynIGTNT89dxzpEDsalXZs=
378+github.com/muesli/cancelreader v0.2.1/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
379 github.com/muesli/mango v0.1.0 h1:DZQK45d2gGbql1arsYA4vfg4d7I9Hfx5rX/GCmzsAvI=
380 github.com/muesli/mango v0.1.0/go.mod h1:5XFpbC8jY5UUv89YQciiXNlbi+iJgt29VDC5xbzrLL4=
381 github.com/muesli/mango-cobra v1.2.0 h1:DQvjzAM0PMZr85Iv9LIMaYISpTOliMEg+uMFtNbYvWg=
382@@ -132,8 +136,10 @@ github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKt
383 github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8=
384 github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig=
385 github.com/muesli/termenv v0.9.0/go.mod h1:R/LzAKf+suGs4IsO95y7+7DpFHO0KABgnZqtlyx2mBw=
386-github.com/muesli/termenv v0.11.1-0.20220212125758-44cd13922739 h1:QANkGiGr39l1EESqrE0gZw0/AJNYzIvoGLhIoVYtluI=
387+github.com/muesli/termenv v0.11.1-0.20220204035834-5ac8409525e0/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs=
388 github.com/muesli/termenv v0.11.1-0.20220212125758-44cd13922739/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs=
389+github.com/muesli/termenv v0.12.0 h1:KuQRUE3PgxRFWhq4gHvZtPSLCGDqM5q/cYr1pZ39ytc=
390+github.com/muesli/termenv v0.12.0/go.mod h1:WCCv32tusQ/EEZ5S8oUIIrC/nIuBcxCVqlN4Xfkv+7A=
391 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
392 github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
393 github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
394@@ -204,8 +210,9 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
395 golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
396 golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
397 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
398-golang.org/x/sys v0.0.0-20220111092808-5a964db01320 h1:0jf+tOCoZ3LyutmCOWpVni1chK4VfFLhRsDK7MhqGRY=
399-golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
400+golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
401+golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c=
402+golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
403 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
404 golang.org/x/term v0.0.0-20210422114643-f5beecf764ed/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
405 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=