From 97e550e45cbe24e63835a5d1e5a98ef3b5b6d991 Mon Sep 17 00:00:00 2001 From: Jean-Marc MEESSEN Date: Fri, 10 Feb 2023 17:45:10 +0100 Subject: [PATCH] Tidying application after Go release bump (#92) * Update dependencies (yaml) * change linter * format code and correct spelling * remove deprecated ioutils * change lint command in "CI" GitHub Action * check return value of cmd.Execute() * Solve lint issues --- .github/workflows/ci.yml | 6 +- .vscode/settings.json | 25 ++++++++ Makefile | 3 +- flecmd/csv.go | 1 - flecmd/load_test.go | 47 +++++++++++---- flecmd/version.go | 1 - fleprocess/adif_process.go | 10 ++-- fleprocess/adif_write.go | 2 +- fleprocess/braketedData.go | 4 +- fleprocess/csv_process.go | 4 +- fleprocess/csv_write.go | 2 +- fleprocess/inferTime.go | 12 ++-- fleprocess/inferTime_test.go | 12 ++-- fleprocess/load_file.go | 38 ++++++------ fleprocess/load_file_test.go | 15 +++-- fleprocess/output_filename.go | 6 +- fleprocess/output_filename_test.go | 14 +++-- fleprocess/parse_line.go | 2 +- fleprocess/validate.go | 6 +- go.mod | 18 ++++-- go.sum | 92 +++++------------------------- 21 files changed, 160 insertions(+), 160 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index babe440..0648a53 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,9 +22,9 @@ jobs: - name: Check out code uses: actions/checkout@v3 - - name: Lint Go Code - run: | - make lint + - name: Lint Go Code with golangci-lint + uses: golangci/golangci-lint-action@v3 + - name: Vet Go Code run: | make vet diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c295305 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,25 @@ +{ + "cSpell.words": [ + "blaaahh", + "deltatime", + "eachline", + "flecmd", + "fleprocess", + "golangci", + "infertime", + "logfile", + "logline", + "mycall", + "mygrid", + "mypota", + "mysota", + "mywwff", + "Nickmane", + "onff", + "Pota", + "qslmsg", + "Sota", + "txtlines", + "Wwff" + ] +} \ No newline at end of file diff --git a/Makefile b/Makefile index 15fe4a1..ebbce19 100644 --- a/Makefile +++ b/Makefile @@ -13,8 +13,7 @@ dep: ## Get the dependencies @go mod download lint: ## Lint Golang files - @go install golang.org/x/lint/golint - @golint -set_exit_status ./... + @golangci-lint run vet: ## Run go vet @go vet ./... diff --git a/flecmd/csv.go b/flecmd/csv.go index 9aade42..da12644 100644 --- a/flecmd/csv.go +++ b/flecmd/csv.go @@ -27,7 +27,6 @@ import ( var outputCsvFilename string var isOverwriteCsv bool -var processCsvCommand = fleprocess.ProcessCsvCommand var csvCmd = csvCmdConstructor() // csvCmd is executed when choosing the csv option (load FLE file and generate csv file) diff --git a/flecmd/load_test.go b/flecmd/load_test.go index 5e418c5..66698ea 100644 --- a/flecmd/load_test.go +++ b/flecmd/load_test.go @@ -20,10 +20,10 @@ import ( "FLEcli/fleprocess" "bytes" "fmt" + "io" "os" "strings" - "io/ioutil" "testing" ) @@ -32,8 +32,13 @@ func Test_ExecuteCommand_help(t *testing.T) { b := bytes.NewBufferString("") cmd.SetOut(b) cmd.SetArgs([]string{"--help"}) - cmd.Execute() - out, err := ioutil.ReadAll(b) + + cmdErr := cmd.Execute() + if cmdErr != nil { + t.Fatal(cmdErr) + } + + out, err := io.ReadAll(b) if err != nil { t.Fatal(err) } @@ -48,13 +53,24 @@ func Test_ExecuteCommand_noArgs(t *testing.T) { b := bytes.NewBufferString("") cmd.SetOut(b) //cmd.SetArgs([]string{""}) - cmd.Execute() - out, err := ioutil.ReadAll(b) + + cmdErr := cmd.Execute() + if cmdErr != nil { + errString := cmdErr.Error() + if errString != "Missing input file " { + t.Fatal(cmdErr) + } + + } else { + t.Fatalf("Call should have failed with an error") + } + + out, err := io.ReadAll(b) if err != nil { t.Fatal(err) } - //FIXME: doesn't work as espected + //FIXME: doesn't work as expected expectedOutputStart := "Error: Missing input file \nUsage:" if !strings.HasPrefix(string(out), expectedOutputStart) { t.Fatalf("expected to start with \"%s\" got \"%s\"", expectedOutputStart, string(out)) @@ -65,9 +81,19 @@ func Test_ExecuteCommand_toManyArgs(t *testing.T) { cmd := loadCmdConstructor() b := bytes.NewBufferString("") cmd.SetOut(b) - cmd.SetArgs([]string{"blaah", "blaah", "blaah"}) - cmd.Execute() - out, err := ioutil.ReadAll(b) + cmd.SetArgs([]string{"blaaahh", "blaaahh", "blaaahh"}) + + cmdErr := cmd.Execute() + if cmdErr != nil { + errString := cmdErr.Error() + if errString != "Too many arguments." { + t.Fatal(cmdErr) + } + + } else { + t.Fatalf("Call should have failed with an error") + } + out, err := io.ReadAll(b) if err != nil { t.Fatal(err) } @@ -89,11 +115,12 @@ func Test_ExecuteCommand_happyCase(t *testing.T) { cmd := loadCmdConstructor() cmd.SetArgs([]string{"data.txt"}) + cmdErr := cmd.Execute() //Close the capture and get the data w.Close() - out, _ := ioutil.ReadAll(r) + out, _ := io.ReadAll(r) os.Stdout = rescueStdout if cmdErr != nil { diff --git a/flecmd/version.go b/flecmd/version.go index d8a7d1b..1d7d766 100644 --- a/flecmd/version.go +++ b/flecmd/version.go @@ -56,7 +56,6 @@ var ( } fmt.Printf("%+v", response) - return }, } ) diff --git a/fleprocess/adif_process.go b/fleprocess/adif_process.go index 55db619..56c6ab0 100644 --- a/fleprocess/adif_process.go +++ b/fleprocess/adif_process.go @@ -21,7 +21,7 @@ import ( "strings" ) -//AdifParams is holding all the parameters required to generate an ADIF file +// AdifParams is holding all the parameters required to generate an ADIF file type AdifParams struct { InputFilename string OutputFilename string @@ -32,8 +32,8 @@ type AdifParams struct { IsOverwrite bool } -//ProcessAdifCommand loads an FLE input to produce an adif file (eventually in WWFF format). It is called from the COBRA interface -//inputFilename, outputFilename string, isInterpolateTime, isWWFFcli, IsSOTA, isPOTAcli, isOverwrite bool +// ProcessAdifCommand loads an FLE input to produce an adif file (eventually in WWFF format). It is called from the COBRA interface +// inputFilename, outputFilename string, isInterpolateTime, isWWFFcli, IsSOTA, isPOTAcli, isOverwrite bool func ProcessAdifCommand(adifParams AdifParams) error { //Validate of build the output filenaem @@ -64,8 +64,8 @@ func ProcessAdifCommand(adifParams AdifParams) error { return nil } -//validateDataforAdif checks whether all the required data is present -//The details of the mandatory files can be found at http://wwff.co/rules-faq/confirming-and-sending-log/ +// validateDataforAdif checks whether all the required data is present +// The details of the mandatory files can be found at http://wwff.co/rules-faq/confirming-and-sending-log/ func validateDataforAdif(loadedLogFile []LogLine, adifParams AdifParams) error { //do we have QSOs at all? diff --git a/fleprocess/adif_write.go b/fleprocess/adif_write.go index 517318f..c81a18b 100644 --- a/fleprocess/adif_write.go +++ b/fleprocess/adif_write.go @@ -110,7 +110,7 @@ func adifElement(elementName, elementValue string) (element string) { return fmt.Sprintf("<%s:%d>%s ", strings.ToUpper(elementName), len(elementValue), elementValue) } -//adifDate converts a date in YYYY-MM-DD format to YYYYMMDD +// adifDate converts a date in YYYY-MM-DD format to YYYYMMDD func adifDate(inputDate string) (outputDate string) { const FLEdateFormat = "2006-01-02" date, err := time.Parse(FLEdateFormat, inputDate) diff --git a/fleprocess/braketedData.go b/fleprocess/braketedData.go index 19e79ec..01c4d11 100644 --- a/fleprocess/braketedData.go +++ b/fleprocess/braketedData.go @@ -20,10 +20,10 @@ import ( "strings" ) -//The BraketType type is used to define the enumeration +// The BraketType type is used to define the enumeration type BraketType int -//Enumeration of the valid Bracket Types +// Enumeration of the valid Bracket Types const ( COMMENT BraketType = iota QSL diff --git a/fleprocess/csv_process.go b/fleprocess/csv_process.go index 653006c..0fea908 100644 --- a/fleprocess/csv_process.go +++ b/fleprocess/csv_process.go @@ -23,7 +23,7 @@ import ( "strings" ) -//ProcessCsvCommand loads an FLE input to produce a SOTA CSV +// ProcessCsvCommand loads an FLE input to produce a SOTA CSV func ProcessCsvCommand(inputFilename, outputFilename string, isInterpolateTime, isOverwriteCsv bool) error { //Validate of build the output filenaem @@ -53,7 +53,7 @@ func ProcessCsvCommand(inputFilename, outputFilename string, isInterpolateTime, } -//validateDataForSotaCsv checks whether all the requiered data is present in the supplied data +// validateDataForSotaCsv checks whether all the requiered data is present in the supplied data func validateDataForSotaCsv(loadedLogFile []LogLine) error { if len(loadedLogFile) == 0 { return fmt.Errorf("no QSO found") diff --git a/fleprocess/csv_write.go b/fleprocess/csv_write.go index 67f6663..73212b5 100644 --- a/fleprocess/csv_write.go +++ b/fleprocess/csv_write.go @@ -65,7 +65,7 @@ func buildCsv(fullLog []LogLine) (csvList []string) { return csvList } -//csvDate converts a date in YYYY-MM-DD format to YYYY/MM/DD +// csvDate converts a date in YYYY-MM-DD format to YYYY/MM/DD func csvDate(inputDate string) (outputDate string) { const FLEdateFormat = "2006-01-02" date, err := time.Parse(FLEdateFormat, inputDate) diff --git a/fleprocess/inferTime.go b/fleprocess/inferTime.go index 1b8f640..8098807 100644 --- a/fleprocess/inferTime.go +++ b/fleprocess/inferTime.go @@ -25,7 +25,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -//InferTimeBlock contains the information describing a time gap +// InferTimeBlock contains the information describing a time gap type InferTimeBlock struct { lastRecordedTime time.Time nextValidTime time.Time @@ -37,10 +37,10 @@ type InferTimeBlock struct { deltatime time.Duration } -//ADIFdateTimeFormat describes the ADIF date & time parsing and displaying format pattern +// ADIFdateTimeFormat describes the ADIF date & time parsing and displaying format pattern const ADIFdateTimeFormat = "2006-01-02 1504" -//displayTimeGapInfo will print the details stored in an InferTimeBlock +// displayTimeGapInfo will print the details stored in an InferTimeBlock func (tb *InferTimeBlock) String() string { var buffer strings.Builder buffer.WriteString(fmt.Sprintf("Last Recorded Time: %s\n", tb.lastRecordedTime.Format(ADIFdateTimeFormat))) @@ -51,7 +51,7 @@ func (tb *InferTimeBlock) String() string { return buffer.String() } -//finalizeTimeGap makes the necessary checks and computation +// finalizeTimeGap makes the necessary checks and computation func (tb *InferTimeBlock) finalizeTimeGap() error { if err := tb.validateTimeGap(); err != nil { @@ -72,7 +72,7 @@ func (tb *InferTimeBlock) finalizeTimeGap() error { return nil } -//validateTimeGap checks some important assumptions +// validateTimeGap checks some important assumptions func (tb *InferTimeBlock) validateTimeGap() error { //Check that lastRecordedTime and nextValidTime are not null if tb.lastRecordedTime.IsZero() { @@ -89,7 +89,7 @@ func (tb *InferTimeBlock) validateTimeGap() error { return nil } -//storeTimeGap updates an InferTimeBLock (last valid time, nbr of records without time). It returns true if we reached the end of the time gap. +// storeTimeGap updates an InferTimeBLock (last valid time, nbr of records without time). It returns true if we reached the end of the time gap. func (tb *InferTimeBlock) storeTimeGap(logline LogLine, position int) (bool, error) { var err error diff --git a/fleprocess/inferTime_test.go b/fleprocess/inferTime_test.go index 785c149..e6a0c85 100644 --- a/fleprocess/inferTime_test.go +++ b/fleprocess/inferTime_test.go @@ -96,7 +96,9 @@ func TestInferTimeBlock_display_happyCase(t *testing.T) { //When buffer1 := tb.String() - tb.finalizeTimeGap() + if tb.finalizeTimeGap() != nil { + t.Error("Unexpected error") + } buffer2 := tb.String() @@ -216,7 +218,7 @@ func TestInferTimeBlock_startsNewBlock(t *testing.T) { t.Errorf("Unexpected error: %s", err) } if isEndGap == true { - t.Errorf("Result is true while expectig false") + t.Errorf("Result is true while expecting false") } if tb.lastRecordedTime != time.Date(2020, time.May, 24, 14, 01, 0, 0, time.UTC) { t.Errorf("Not the expected lastRecordedTime") @@ -249,7 +251,7 @@ func TestInferTimeBlock_incrementCounter(t *testing.T) { t.Errorf("Unexpected error: %s", err) } if isEndGap == true { - t.Errorf("Result is true while expectig false") + t.Errorf("Result is true while expecting false") } if tb.lastRecordedTime != time.Date(2020, time.May, 24, 14, 01, 0, 0, time.UTC) { t.Errorf("Not the expected lastRecordedTime") @@ -282,7 +284,7 @@ func TestInferTimeBlock_increment_missingLastTime(t *testing.T) { t.Errorf("Unexpected error: %s", err) } if isEndGap == true { - t.Errorf("Result is true while expectig false") + t.Errorf("Result is true while expecting false") } } @@ -307,6 +309,6 @@ func TestInferTimeBlock_increment_alreadyDefinedNewTime(t *testing.T) { t.Errorf("Unexpected error: %s", err) } if isEndGap == true { - t.Errorf("Result is true while expectig false") + t.Errorf("Result is true while expecting false") } } diff --git a/fleprocess/load_file.go b/fleprocess/load_file.go index d79f7ac..2fd9bac 100644 --- a/fleprocess/load_file.go +++ b/fleprocess/load_file.go @@ -26,8 +26,8 @@ import ( "time" ) -//LoadFile FIXME: -//returns nill if failure to process +// LoadFile FIXME: +// returns nill if failure to process func LoadFile(inputFilename string, isInterpolateTime bool) (filleFullLog []LogLine, isProcessedOK bool) { file, err := os.Open(inputFilename) @@ -82,7 +82,7 @@ func LoadFile(inputFilename string, isInterpolateTime bool) (filleFullLog []LogL missingTimeBlockList := []InferTimeBlock{} var isInMultiLine = false - var cleanedInput []string + // var cleanedInput []string var errorLog []string var previousLogLine LogLine @@ -93,7 +93,7 @@ func LoadFile(inputFilename string, isInterpolateTime bool) (filleFullLog []LogL lineCount++ // **** - // ** Lets do some house keeping first by droping the unecessary lines + // ** Lets do some house keeping first by dropping the unnecessary lines // **** //Skip the line if it starts with "#" @@ -107,7 +107,7 @@ func LoadFile(inputFilename string, isInterpolateTime bool) (filleFullLog []LogL // Process multi-line comments if regexpStartMultiLineComment.MatchString(eachline) { - //Single-line "multi-line" coment + //Single-line "multi-line" comment if regexpSingleMultiLineComment.MatchString(eachline) { continue } @@ -136,7 +136,7 @@ func LoadFile(inputFilename string, isInterpolateTime bool) (filleFullLog []LogL myCallList := regexpHeaderMyCall.Split(eachline, -1) if len(strings.TrimSpace(myCallList[1])) > 0 { headerMyCall, errorMsg = ValidateCall(strings.TrimSpace(myCallList[1])) - cleanedInput = append(cleanedInput, fmt.Sprintf("My call: %s", headerMyCall)) + // cleanedInput = append(cleanedInput, fmt.Sprintf("My call: %s", headerMyCall)) if len(errorMsg) != 0 { errorLog = append(errorLog, fmt.Sprintf("Invalid myCall at line %d: %s (%s)", lineCount, myCallList[1], errorMsg)) } @@ -156,7 +156,7 @@ func LoadFile(inputFilename string, isInterpolateTime bool) (filleFullLog []LogL myOperatorList := regexpHeaderOperator.Split(eachline, -1) if len(strings.TrimSpace(myOperatorList[1])) > 0 { headerOperator, errorMsg = ValidateCall(strings.TrimSpace(myOperatorList[1])) - cleanedInput = append(cleanedInput, fmt.Sprintf("Operator: %s", headerOperator)) + // cleanedInput = append(cleanedInput, fmt.Sprintf("Operator: %s", headerOperator)) if len(errorMsg) != 0 { errorLog = append(errorLog, fmt.Sprintf("Invalid Operator at line %d: %s (%s)", lineCount, myOperatorList[1], errorMsg)) } @@ -176,7 +176,7 @@ func LoadFile(inputFilename string, isInterpolateTime bool) (filleFullLog []LogL myWwffList := regexpHeaderMyWwff.Split(eachline, -1) if len(strings.TrimSpace(myWwffList[1])) > 0 { headerMyWWFF, errorMsg = ValidateWwff(strings.TrimSpace(myWwffList[1])) - cleanedInput = append(cleanedInput, fmt.Sprintf("My WWFF: %s", headerMyWWFF)) + // cleanedInput = append(cleanedInput, fmt.Sprintf("My WWFF: %s", headerMyWWFF)) if len(errorMsg) != 0 { errorLog = append(errorLog, fmt.Sprintf("Invalid \"My WWFF\" at line %d: %s (%s)", lineCount, myWwffList[1], errorMsg)) } @@ -196,7 +196,7 @@ func LoadFile(inputFilename string, isInterpolateTime bool) (filleFullLog []LogL myPotaList := regexpHeaderMyPota.Split(eachline, -1) if len(strings.TrimSpace(myPotaList[1])) > 0 { headerMyPOTA, errorMsg = ValidatePota(strings.TrimSpace(myPotaList[1])) - cleanedInput = append(cleanedInput, fmt.Sprintf("My Pota: %s", headerMyPOTA)) + // cleanedInput = append(cleanedInput, fmt.Sprintf("My Pota: %s", headerMyPOTA)) if len(errorMsg) != 0 { errorLog = append(errorLog, fmt.Sprintf("Invalid \"My POTA\" at line %d: %s (%s)", lineCount, myPotaList[1], errorMsg)) } @@ -216,7 +216,7 @@ func LoadFile(inputFilename string, isInterpolateTime bool) (filleFullLog []LogL mySotaList := regexpHeaderMySota.Split(eachline, -1) if len(strings.TrimSpace(mySotaList[1])) > 0 { headerMySOTA, errorMsg = ValidateSota(strings.TrimSpace(mySotaList[1])) - cleanedInput = append(cleanedInput, fmt.Sprintf("My Sota: %s", headerMySOTA)) + // cleanedInput = append(cleanedInput, fmt.Sprintf("My Sota: %s", headerMySOTA)) if len(errorMsg) != 0 { errorLog = append(errorLog, fmt.Sprintf("Invalid \"My SOTA\" at line %d: %s (%s)", lineCount, mySotaList[1], errorMsg)) } @@ -236,7 +236,7 @@ func LoadFile(inputFilename string, isInterpolateTime bool) (filleFullLog []LogL myGridList := regexpHeaderMyGrid.Split(eachline, -1) if len(strings.TrimSpace(myGridList[1])) > 0 { headerMyGrid, errorMsg = ValidateGridLocator(strings.TrimSpace(myGridList[1])) - cleanedInput = append(cleanedInput, fmt.Sprintf("My Grid: %s", headerMyGrid)) + // cleanedInput = append(cleanedInput, fmt.Sprintf("My Grid: %s", headerMyGrid)) if len(errorMsg) != 0 { errorLog = append(errorLog, fmt.Sprintf("Invalid \"My Grid\" at line %d: %s (%s)", lineCount, myGridList[1], errorMsg)) } @@ -250,7 +250,7 @@ func LoadFile(inputFilename string, isInterpolateTime bool) (filleFullLog []LogL myQslMsgList := regexpHeaderQslMsg.Split(eachline, -1) if len(myQslMsgList[1]) > 0 { headerQslMsg = myQslMsgList[1] - cleanedInput = append(cleanedInput, fmt.Sprintf("QSL Message: %s", headerQslMsg)) + // cleanedInput = append(cleanedInput, fmt.Sprintf("QSL Message: %s", headerQslMsg)) } //If there is no data after the marker, we just skip the data. continue @@ -266,7 +266,7 @@ func LoadFile(inputFilename string, isInterpolateTime bool) (filleFullLog []LogL myNicknameList := regexpHeaderNickname.Split(eachline, -1) if len(strings.TrimSpace(myNicknameList[1])) > 0 { headerNickname = strings.TrimSpace(myNicknameList[1]) - cleanedInput = append(cleanedInput, fmt.Sprintf("eQSL Nickmane: %s", headerNickname)) + // cleanedInput = append(cleanedInput, fmt.Sprintf("eQSL Nickmane: %s", headerNickname)) } //If there is no data after the marker, we just skip the data. continue @@ -303,7 +303,7 @@ func LoadFile(inputFilename string, isInterpolateTime bool) (filleFullLog []LogL //If we reached the end of the time gap, we make the necessary checks and make our gap calculation if isEndOfGap { if err := wrkTimeBlock.finalizeTimeGap(); err != nil { - //If an error occured it is a fatal error + //If an error occurred it is a fatal error errorLog = append(errorLog, fmt.Sprintf("Fatal error at line %d: %s", lineCount, err)) isInferTimeFatalError = true } @@ -319,8 +319,12 @@ func LoadFile(inputFilename string, isInterpolateTime bool) (filleFullLog []LogL wrkTimeBlock = InferTimeBlock{} //Store this record in the new block as a new gap might be following - //no error or endOfGap processing as it has already been successfully processed - wrkTimeBlock.storeTimeGap(logline, len(fullLog)) + _, err := wrkTimeBlock.storeTimeGap(logline, len(fullLog)) + //no real error or endOfGap processing as it has already been successfully processed + if err != nil { + errorLog = append(errorLog, fmt.Sprintf("Fatal error at line %d: %s", lineCount, err)) + isInferTimeFatalError = true + } } } } @@ -382,7 +386,7 @@ func LoadFile(inputFilename string, isInterpolateTime bool) (filleFullLog []LogL } -//displayLogSimple will print to stdout a simplified dump of a full log +// displayLogSimple will print to stdout a simplified dump of a full log func displayLogSimple(fullLog []LogLine) { firstLine := true for _, filledLogLine := range fullLog { diff --git a/fleprocess/load_file_test.go b/fleprocess/load_file_test.go index c3fabdb..29e984e 100644 --- a/fleprocess/load_file_test.go +++ b/fleprocess/load_file_test.go @@ -18,7 +18,6 @@ limitations under the License. import ( "fmt" - "io/ioutil" "os" "testing" ) @@ -547,7 +546,7 @@ func TestLoadFile_redefining_operator_must_fail(t *testing.T) { dataArray = append(dataArray, " #Log") dataArray = append(dataArray, "20/5/23") dataArray = append(dataArray, "40m cw 0950 ik5zve/5 9 5") - dataArray = append(dataArray, "operator blahh") + dataArray = append(dataArray, "operator blaaahh") temporaryDataFileName := createTestFile(dataArray) @@ -768,7 +767,7 @@ func TestLoadFile_wrongHeader(t *testing.T) { os.Remove(temporaryDataFileName) } -//if the first call is wrong the infertime doesn't work +// if the first call is wrong the infertime doesn't work func TestLoadFile_InferTime_missingStartTime(t *testing.T) { //Given @@ -915,7 +914,7 @@ func TestLoadFile_InferTime_missingEndTime(t *testing.T) { os.Remove(temporaryDataFileName) } -//FIXME: same time +// FIXME: same time func TestLoadFile_2_QSO_same_time(t *testing.T) { //Given @@ -1168,11 +1167,11 @@ func TestLoadFile_firstCallWrong(t *testing.T) { os.Remove(temporaryDataFileName) } -//createTestFile creates and populates a test FLE input file. -//Returns the created temporary filename. +// createTestFile creates and populates a test FLE input file. +// Returns the created temporary filename. func createTestFile(dataArray []string) (tempFileName string) { //create random file name - tmpfile, err := ioutil.TempFile("", "*.txt") + tmpfile, err := os.CreateTemp("", "*.txt") if err != nil { panic(err) } @@ -1182,6 +1181,6 @@ func createTestFile(dataArray []string) (tempFileName string) { //Write the passed data to the file writeFile(tmpfile.Name(), dataArray) - //Return the temporaty filename + //Return the temporary filename return tmpfile.Name() } diff --git a/fleprocess/output_filename.go b/fleprocess/output_filename.go index 99c89b3..846f57c 100644 --- a/fleprocess/output_filename.go +++ b/fleprocess/output_filename.go @@ -22,12 +22,12 @@ import ( "path/filepath" ) -//buildOutputFilname will try to figure out an output filename (for the case none was provided) +// buildOutputFilename will try to figure out an output filename (for the case none was provided) func buildOutputFilename(output string, input string, overwrite bool, newExtension string) (string, error) { //validate that input is populated (should never happen if properly called) if input == "" { - return "", fmt.Errorf("unexepected error: no input file provided") + return "", fmt.Errorf("unexpected error: no input file provided") } //No output was provided, let's create one from the input file @@ -44,7 +44,7 @@ func buildOutputFilename(output string, input string, overwrite bool, newExtensi //File doesn't exist, so we're good return output, nil } - //It exisits but is a directory + //It exists but is a directory if info.IsDir() { return "", fmt.Errorf("error: specified output exists and is a directory") } diff --git a/fleprocess/output_filename_test.go b/fleprocess/output_filename_test.go index 427899c..d72421e 100644 --- a/fleprocess/output_filename_test.go +++ b/fleprocess/output_filename_test.go @@ -28,7 +28,9 @@ const testFile string = "test.adi" func setupTestCase(t *testing.T) func(t *testing.T) { t.Log("setup test case") //create test directory - os.Mkdir(testDir, os.FileMode(0522)) + if os.Mkdir(testDir, os.FileMode(0522)) != nil { + t.Error("Unexpected error creating testDir") + } //create test file f, _ := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) defer f.Close() @@ -37,7 +39,7 @@ func setupTestCase(t *testing.T) func(t *testing.T) { t.Log("teardown test case") //delete test directory os.Remove(testDir) - //detete test file + //delete test file os.Remove(testFile) } } @@ -58,7 +60,7 @@ func Test_buildOutputFilename(t *testing.T) { { "input file not provided", args{input: "", output: "xxx", overwrite: false, extension: ".adi"}, - "", errors.New("unexepected error: no input file provided"), + "", errors.New("unexpected error: no input file provided"), }, { "Output file does not exist", @@ -81,17 +83,17 @@ func Test_buildOutputFilename(t *testing.T) { "test.adi", nil, }, { - "no output, input provided with extention", + "no output, input provided with extension", args{input: "/test/data/file.txt", output: "", overwrite: false, extension: ".adi"}, "/test/data/file.adi", nil, }, { - "no output, input provided without extention", + "no output, input provided without extension", args{input: "/test/data/file", output: "", overwrite: false, extension: ".adi"}, "/test/data/file.adi", nil, }, { - "no output, input provided, enfing with a point", + "no output, input provided, ending with a point", args{input: "/test/data/file.", output: "", overwrite: false, extension: ".adi"}, "/test/data/file.adi", nil, }, diff --git a/fleprocess/parse_line.go b/fleprocess/parse_line.go index f5205c1..c0e4181 100644 --- a/fleprocess/parse_line.go +++ b/fleprocess/parse_line.go @@ -188,7 +188,7 @@ func ParseLine(inputStr string, previousLine LogLine) (logLine LogLine, errorMsg if (logLine.BandLowerLimit != 0.0) && (logLine.BandUpperLimit != 0.0) { if (qrg >= logLine.BandLowerLimit) && (qrg <= logLine.BandUpperLimit) { //Increase precision to half Khz if data is available - if len(khzPart[0]) > 4 { + if len(khzPart[0]) > 4 { //The "." is part of the returned string logLine.Frequency = fmt.Sprintf("%.4f", qrg) } else { diff --git a/fleprocess/validate.go b/fleprocess/validate.go index 5243094..79a30ed 100644 --- a/fleprocess/validate.go +++ b/fleprocess/validate.go @@ -145,7 +145,7 @@ func ValidateCall(sign string) (call, errorMsg string) { var splitDateRegexp = regexp.MustCompile(`[-/ .]`) -//NormalizeDate takes what looks like a date and normalises it to "YYYY-MM-DD" +// NormalizeDate takes what looks like a date and normalises it to "YYYY-MM-DD" func NormalizeDate(inputStr string) (date, errorMsg string) { //Try to split the string s := splitDateRegexp.Split(inputStr, 4) @@ -207,7 +207,7 @@ func ValidateDate(inputStr string) (ref, errorMsg string) { return wrongInputStr, fmt.Sprint(err) } -//IncrementDate will increment the supplied date by the specified increment. It returns the new date. +// IncrementDate will increment the supplied date by the specified increment. It returns the new date. func IncrementDate(date string, increment int) (newdate string, err string) { if date == "" { return "", "No date to increment" @@ -230,7 +230,7 @@ func IncrementDate(date string, increment int) (newdate string, err string) { return newDate.Format(RFC3339FullDate), "" } -//IsBand retuns true if the passed input string is a valid string +// IsBand retuns true if the passed input string is a valid string func IsBand(inputStr string) (result bool, lowerLimit, upperLimit float64, altBandName string) { switch strings.ToLower(inputStr) { case "2190m": diff --git a/go.mod b/go.mod index fbbf931..1420980 100644 --- a/go.mod +++ b/go.mod @@ -1,17 +1,27 @@ module FLEcli -go 1.14 +go 1.19 require ( - github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/mitchellh/go-homedir v1.1.0 + github.com/spf13/cobra v1.0.0 + github.com/spf13/viper v1.7.1 +) + +require ( + github.com/fsnotify/fsnotify v1.5.1 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/magiconair/properties v1.8.1 // indirect github.com/mitchellh/mapstructure v1.3.3 // indirect github.com/pelletier/go-toml v1.8.0 // indirect github.com/spf13/afero v1.3.5 // indirect github.com/spf13/cast v1.3.1 // indirect - github.com/spf13/cobra v1.0.0 github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.7.1 + github.com/subosito/gotenv v1.2.0 // indirect + golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect + golang.org/x/text v0.3.3 // indirect gopkg.in/ini.v1 v1.60.2 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/go.sum b/go.sum index 7a62b80..16f81c8 100644 --- a/go.sum +++ b/go.sum @@ -11,6 +11,7 @@ cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqCl cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= @@ -29,22 +30,18 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -73,6 +70,7 @@ github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OI github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -105,6 +103,7 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= @@ -112,10 +111,11 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -131,10 +131,7 @@ github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eI github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.3.1 h1:cCBH2gTD2K0OtLlv/Y5H01VQCqmlDxz30kS5Y5bqfLA= -github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -142,13 +139,13 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.8.0 h1:Keo9qb7iRJs2voHvunFtuuYFsbWeOBh8/P9v/kVMFtw= github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -162,61 +159,47 @@ github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7z github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.3.5 h1:AWZ/w4lcfxuh52NVL78p9Eh8j6r1mCTEGSRFBJyIHAE= github.com/spf13/afero v1.3.5/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0 h1:yXHLWeravcrgGyFSyCgdYpXQ9dR9c/WED3pg1RhxqEU= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.hein.dev/go-version v0.1.0 h1:hz3epLdx+cim8EN9XRt6pqAHxwWVW0D87Xm3mUbvKvI= -go.hein.dev/go-version v0.1.0/go.mod h1:WOEm7DWMroRe5GdUgHMvx+Pji5WWIpMuXmK/3foylXs= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -224,14 +207,10 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -245,19 +224,11 @@ golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTk golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -273,9 +244,6 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -284,16 +252,12 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -301,29 +265,13 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190812172437-4e8604ab3aff/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121 h1:rITEj+UZHYC927n8GT97eC3zrpzXdb/voyeOuVKS46o= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a h1:i47hUS795cOydZI4AwJQCKXOr4BvxzvikwDoDtHhP2Y= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -339,21 +287,11 @@ golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190812233024-afc3694995b6/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc h1:NCy3Ohtk6Iny5V/reW2Ktypo4zIpWBdRJ1uFMjBxdg8= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200902171120-36b1a880d5d1 h1:5SfEmaQTww9A35eeANMuoDMDbba7pCPVplPWQ72i5lY= -golang.org/x/tools v0.0.0-20200902171120-36b1a880d5d1/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.1.8 h1:P1HhGGuLW4aAclzjtmJdf0mJOjVUZUzOTqkAkWL+l6w= -golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -378,26 +316,22 @@ google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ij google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.57.0 h1:9unxIsFcTt4I55uWluz+UmL95q4kdJ0buvQ1ZIqVQww= -gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.60.2 h1:7i8mqModL63zqi8nQn8Q3+0zvSCZy1AxhBgthKfi4WU= gopkg.in/ini.v1 v1.60.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=