diff --git a/docs/manpage.rst b/docs/manpage.rst index 2ee154353..81d50ad0b 100644 --- a/docs/manpage.rst +++ b/docs/manpage.rst @@ -2377,4 +2377,4 @@ This is simply a copy of what you should see on running **man mlr** at a command - 2020-11-15 MILLER(1) + 2020-11-24 MILLER(1) diff --git a/docs/manpage.txt b/docs/manpage.txt index d1bc71eec..58c923339 100644 --- a/docs/manpage.txt +++ b/docs/manpage.txt @@ -2367,4 +2367,4 @@ SEE ALSO - 2020-11-15 MILLER(1) + 2020-11-24 MILLER(1) diff --git a/docs/mlr.1 b/docs/mlr.1 index 8751fae69..b3626fb80 100644 --- a/docs/mlr.1 +++ b/docs/mlr.1 @@ -2,12 +2,12 @@ .\" Title: mlr .\" Author: [see the "AUTHOR" section] .\" Generator: ./mkman.rb -.\" Date: 2020-11-15 +.\" Date: 2020-11-24 .\" Manual: \ \& .\" Source: \ \& .\" Language: English .\" -.TH "MILLER" "1" "2020-11-15" "\ \&" "\ \&" +.TH "MILLER" "1" "2020-11-24" "\ \&" "\ \&" .\" ----------------------------------------------------------------- .\" * Portability definitions .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/go/cases-to-do.txt b/go/cases-to-do.txt index f0523decb..879227932 100644 --- a/go/cases-to-do.txt +++ b/go/cases-to-do.txt @@ -21,7 +21,12 @@ rrv ./reg-test/cases/case-c-dsl-triple-for-loops.sh "Continuation statements are split into the final boolean, and the statements before (if any)." rrv ./reg-test/cases/case-c-label.sh -* needs uniqueness-checker +* handles old/new clashes differently from C impl :^/ + +================================================================ +ENV + +rrv ./reg-test/cases/case-c-dsl-functional-tests.sh ================================================================ MULTIPLE ISSUES: @@ -43,18 +48,11 @@ rrv ./reg-test/cases/case-c-multi-character-ixs.sh rrv ./reg-test/cases/case-c-implicit-header-csv-input.sh rrv ./reg-test/cases/case-c-missing-final-lf.sh -================================================================ -ENV - -rrv ./reg-test/cases/case-c-dsl-functional-tests.sh - ================================================================ PUT -S / -F / -A -rrv ./reg-test/cases/case-c-dsl-type-inference.sh rrv -C1 ./reg-test/cases/case-c-dsl-for-srec-loops.sh rrv -C1 ./reg-test/cases/case-c-dsl-type-inference.sh -rrv ./reg-test/cases/case-c-dsl-pythonic-division.sh rrv -C20 ./reg-test/cases/case-c-dsl-local-map-variable-write-read.sh rrv -C20 ./reg-test/cases/case-c-dsl-local-map-variable-write-read.sh @@ -63,6 +61,8 @@ rrv -C20 ./reg-test/cases/case-c-dsl-local-map-variable-write-read.sh ================================================================ ARRAY/MAP +rrv ./reg-test/cases/case-c-localvar-unsets.sh + rrv -C5 ./reg-test/cases/case-c-dsl-for-oosvar-loops.sh rrv ./reg-test/cases/case-c-dsl-mapvar-assignments.sh @@ -108,16 +108,6 @@ rrv ./reg-test/cases/case-c-dsl-trailing-commas.sh rrv ./reg-test/cases/case-c-dsl-argpass-typedecl.sh rrv ./reg-test/cases/case-c-dsl-multipart-scripts.sh -================================================================ -FORMATTING? - -rrv ./reg-test/cases/case-c-dsl-forbind-typedecl.sh -rrv ./reg-test/cases/case-c-dsl-indirect-srec-assignments.sh -rrv ./reg-test/cases/case-c-dsl-operator-associativity.sh -rrv ./reg-test/cases/case-c-dsl-operator-precedence.sh -rrv ./reg-test/cases/case-c-dsl-typed-overlay.sh -rrv ./reg-test/cases/case-c-localvar-unsets.sh - ================================================================ PARTIALLY IMPLEMENTED: @@ -222,19 +212,3 @@ rrv ./reg-test/cases/case-c-step.sh rrv ./reg-test/cases/case-c-top.sh rrv ./reg-test/cases/case-c-uniq.sh rrv ./reg-test/cases/case-c-utf8-bom.sh - -================================================================ -JUST FORMATTING NOW?? - -rrv ./reg-test/cases/case-c-dsl-type-inference.sh -rrv -C1 ./reg-test/cases/case-c-dsl-for-srec-loops.sh -rrv -C1 ./reg-test/cases/case-c-dsl-type-inference.sh -rrv ./reg-test/cases/case-c-dsl-pythonic-division.sh - -rrv -C20 ./reg-test/cases/case-c-dsl-local-map-variable-write-read.sh -rrv -C1 ./reg-test/cases/case-c-dsl-local-map-variable-write-read.sh - -================================================================ -rrv -C20 ./reg-test/cases/case-c-dsl-empty-statements.sh -rrv -C1 ./reg-test/cases/case-c-dsl-empty-statements.sh -================================================================ diff --git a/go/src/miller/mappers/label.go b/go/src/miller/mappers/label.go index 56701a4f1..3e2461425 100644 --- a/go/src/miller/mappers/label.go +++ b/go/src/miller/mappers/label.go @@ -1,6 +1,7 @@ package mappers import ( + "errors" "flag" "fmt" "os" @@ -60,9 +61,13 @@ func mapperLabelParseCLI( argi += 1 - mapper, _ := NewMapperLabel( + mapper, err := NewMapperLabel( newNames, ) + if err != nil { + fmt.Fprint(os.Stderr, err) + return nil + } *pargi = argi return mapper @@ -95,6 +100,20 @@ type MapperLabel struct { func NewMapperLabel( newNames []string, ) (*MapperLabel, error) { + uniquenessChecker := make(map[string]bool) + for _, newName := range newNames { + _, ok := uniquenessChecker[newName] + if ok { + return nil, errors.New( + fmt.Sprintf( + "mlr label: labels must be unique; got duplicate \"%s\"\n", + newName, + ), + ) + } + uniquenessChecker[newName] = true + } + this := &MapperLabel{ newNames: newNames, }