Skip to content

Commit 0873a9b

Browse files
feat: allow mage:import alias to be defined for multiple imports (#398)
1 parent 2f1ec40 commit 0873a9b

File tree

8 files changed

+104
-5
lines changed

8 files changed

+104
-5
lines changed

mage/import_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,3 +312,57 @@ Error parsing magefiles: error running "go list -f {{.Dir}}||{{.Name}} github.co
312312
t.Fatalf("expected:\n%s\n\ngot:\n%s", expected, actualShortened)
313313
}
314314
}
315+
316+
func TestMageImportsSameNamespaceUniqueTargets(t *testing.T) {
317+
stdout := &bytes.Buffer{}
318+
stderr := &bytes.Buffer{}
319+
inv := Invocation{
320+
Dir: "./testdata/mageimport/samenamespace/uniquetargets",
321+
Stdout: stdout,
322+
Stderr: stderr,
323+
List: true,
324+
}
325+
326+
code := Invoke(inv)
327+
if code != 0 {
328+
t.Fatalf("expected to exit with code 0, but got %v, stderr:\n%s", code, stderr)
329+
}
330+
actual := stdout.String()
331+
expected := `
332+
Targets:
333+
samenamespace:build1
334+
samenamespace:build2
335+
`[1:]
336+
337+
if actual != expected {
338+
t.Logf("expected: %q", expected)
339+
t.Logf(" actual: %q", actual)
340+
t.Fatalf("expected:\n%v\n\ngot:\n%v", expected, actual)
341+
}
342+
}
343+
344+
func TestMageImportsSameNamespaceDupTargets(t *testing.T) {
345+
stdout := &bytes.Buffer{}
346+
stderr := &bytes.Buffer{}
347+
inv := Invocation{
348+
Dir: "./testdata/mageimport/samenamespace/duptargets",
349+
Stdout: stdout,
350+
Stderr: stderr,
351+
List: true,
352+
}
353+
354+
code := Invoke(inv)
355+
if code != 1 {
356+
t.Fatalf("expected to exit with code 1, but got %v, stderr:\n%s", code, stderr)
357+
}
358+
actual := stderr.String()
359+
expected := `
360+
Error parsing magefiles: "samenamespace:build" target has multiple definitions: github.com/magefile/mage/mage/testdata/mageimport/samenamespace/duptargets/package1.Build, github.com/magefile/mage/mage/testdata/mageimport/samenamespace/duptargets/package2.Build
361+
362+
`[1:]
363+
if actual != expected {
364+
t.Logf("expected: %q", expected)
365+
t.Logf(" actual: %q", actual)
366+
t.Fatalf("expected:\n%v\n\ngot:\n%v", expected, actual)
367+
}
368+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// +build mage
2+
3+
package sametarget
4+
5+
import (
6+
// mage:import samenamespace
7+
_ "github.com/magefile/mage/mage/testdata/mageimport/samenamespace/duptargets/package1"
8+
// mage:import samenamespace
9+
_ "github.com/magefile/mage/mage/testdata/mageimport/samenamespace/duptargets/package2"
10+
)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package package1
2+
3+
import "fmt"
4+
5+
func Build() {
6+
fmt.Println("build")
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package package2
2+
3+
import "fmt"
4+
5+
func Build() {
6+
fmt.Println("build")
7+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// +build mage
2+
3+
package main
4+
5+
import (
6+
// mage:import samenamespace
7+
_ "github.com/magefile/mage/mage/testdata/mageimport/samenamespace/uniquetargets/package1"
8+
// mage:import samenamespace
9+
_ "github.com/magefile/mage/mage/testdata/mageimport/samenamespace/uniquetargets/package2"
10+
)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package package1
2+
3+
import "fmt"
4+
5+
func Build1() {
6+
fmt.Println("build")
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package package2
2+
3+
import "fmt"
4+
5+
func Build2() {
6+
fmt.Println("build")
7+
}

parse/parse.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ func Package(path string, files []string) (*PkgInfo, error) {
267267

268268
func getNamedImports(gocmd string, pkgs map[string]string) ([]*Import, error) {
269269
var imports []*Import
270-
for alias, pkg := range pkgs {
270+
for pkg, alias := range pkgs {
271271
debug.Printf("getting import package %q, alias %q", pkg, alias)
272272
imp, err := getImport(gocmd, pkg, alias)
273273
if err != nil {
@@ -411,10 +411,7 @@ func setImports(gocmd string, pi *PkgInfo) error {
411411
}
412412
if alias != "" {
413413
debug.Printf("found %s: %s (%s)", importTag, name, alias)
414-
if importNames[alias] != "" {
415-
return fmt.Errorf("duplicate import alias: %q", alias)
416-
}
417-
importNames[alias] = name
414+
importNames[name] = alias
418415
} else {
419416
debug.Printf("found %s: %s", importTag, name)
420417
rootImports = append(rootImports, name)

0 commit comments

Comments
 (0)