Skip to content

Commit 64205ca

Browse files
authored
chore: avoid adding .build directory to client's workspace (#771)
- Pass `--build-path` to select `swift package` calls that are executed during `update-repos` (i.e., `//:swift_update_pkgs`). - Remove obsolete `.bazelignore` files. - Remove call to utility that cleans up `.build` directories. Closes #758.
1 parent ecfeba7 commit 64205ca

File tree

12 files changed

+58
-30
lines changed

12 files changed

+58
-30
lines changed

BUILD.bazel

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ tidy(
2929
# Remove the child workspace symlinks before doing some of the other
3030
# operations that my experience infinite symlink expansion errors.
3131
"@rules_bazel_integration_test//tools:remove_child_wksp_bazel_symlinks",
32-
# Remove any Swift .build directories
33-
"//tools/remove_swift_build_dirs",
3432
"@rules_bazel_integration_test//tools:update_deleted_packages",
3533
":bzlformat_missing_pkgs_fix",
3634
":update_all",

examples/firebase_example/.bazelignore

Lines changed: 0 additions & 2 deletions
This file was deleted.

examples/tca_example/.bazelignore

Lines changed: 0 additions & 1 deletion
This file was deleted.

gazelle/internal/swift/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ go_library(
2626
"module_to_products_index.go",
2727
"module_type.go",
2828
"package.go",
29-
"packages_index.go",
29+
"package_index.go",
3030
"patch.go",
3131
"product.go",
3232
"product_index.go",

gazelle/internal/swift/code_dir.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,14 @@ import (
66
"strings"
77
)
88

9-
const swiftPkgBuildDirname = ".build"
109
const swiftPkgCheckoutsDirname = "checkouts"
1110

1211
// CodeDirForRemotePackage returns the path to the dependency's code. For source control
1312
// dependencies, it is the checkout directory.
14-
func CodeDirForRemotePackage(pkgDir string, url string) string {
13+
func CodeDirForRemotePackage(buildDir string, url string) string {
1514
// Return the checkout directory
1615
return filepath.Join(
17-
pkgDir,
18-
swiftPkgBuildDirname,
16+
buildDir,
1917
swiftPkgCheckoutsDirname,
2018
spmCheckoutDirname(url),
2119
)

gazelle/internal/swift/code_dir_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
)
99

1010
const pkgDir = "/path/to/pkg"
11+
const buildDir = "/path/to/build"
1112

1213
func TestCodeDirForRemotePackage(t *testing.T) {
1314
tests := []struct {
@@ -16,19 +17,19 @@ func TestCodeDirForRemotePackage(t *testing.T) {
1617
}{
1718
{
1819
url: "https://github.com/nicklockwood/SwiftFormat",
19-
wval: "/path/to/pkg/.build/checkouts/SwiftFormat",
20+
wval: "/path/to/build/checkouts/SwiftFormat",
2021
},
2122
{
2223
url: "https://github.com/nicklockwood/SwiftFormat.git",
23-
wval: "/path/to/pkg/.build/checkouts/SwiftFormat",
24+
wval: "/path/to/build/checkouts/SwiftFormat",
2425
},
2526
{
2627
url: "https://github.com/nicklockwood/SwiftFormat.swift",
27-
wval: "/path/to/pkg/.build/checkouts/SwiftFormat.swift",
28+
wval: "/path/to/build/checkouts/SwiftFormat.swift",
2829
},
2930
}
3031
for _, tc := range tests {
31-
actual := swift.CodeDirForRemotePackage(pkgDir, tc.url)
32+
actual := swift.CodeDirForRemotePackage(buildDir, tc.url)
3233
assert.Equal(t, tc.wval, actual)
3334
}
3435
}
File renamed without changes.

gazelle/internal/swiftbin/swift_bin.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
// An Executor represents commands provided by the Swift binary.
1010
type Executor interface {
1111
InitPackage(dir, name, pkgType string) error
12-
DumpPackage(dir string) ([]byte, error)
12+
DumpPackage(dir, buildDir string) ([]byte, error)
1313
DescribePackage(dir string) ([]byte, error)
1414
}
1515

@@ -34,10 +34,12 @@ func (sb *SwiftBin) InitPackage(dir, name, pkgType string) error {
3434
}
3535

3636
// DumpPackage returns the `swift package dump-package` JSON for a Swift package.
37-
func (sb *SwiftBin) DumpPackage(dir string) ([]byte, error) {
37+
func (sb *SwiftBin) DumpPackage(dir, buildDir string) ([]byte, error) {
3838
var stdout bytes.Buffer
3939
var stderr bytes.Buffer
40-
cmd := exec.Command(sb.BinPath, "package", "dump-package")
40+
args := []string{"package", "dump-package"}
41+
args = appendBuildPath(args, buildDir)
42+
cmd := exec.Command(sb.BinPath, args...)
4143
cmd.Dir = dir
4244
cmd.Stdout = &stdout
4345
cmd.Stderr = &stderr
@@ -55,7 +57,8 @@ func (sb *SwiftBin) DumpPackage(dir string) ([]byte, error) {
5557
func (sb *SwiftBin) DescribePackage(dir string) ([]byte, error) {
5658
var stdout bytes.Buffer
5759
var stderr bytes.Buffer
58-
cmd := exec.Command(sb.BinPath, "package", "describe", "--type", "json")
60+
args := []string{"package", "describe", "--type", "json"}
61+
cmd := exec.Command(sb.BinPath, args...)
5962
cmd.Dir = dir
6063
cmd.Stdout = &stdout
6164
cmd.Stderr = &stderr
@@ -70,18 +73,26 @@ func (sb *SwiftBin) DescribePackage(dir string) ([]byte, error) {
7073
}
7174

7275
// ResolvePackage executes Swift package dependency resolution for a Swift package.
73-
func (sb *SwiftBin) ResolvePackage(dir string, updateToLatest bool) error {
76+
func (sb *SwiftBin) ResolvePackage(dir, buildDir string, updateToLatest bool) error {
7477
var pkgCmd string
7578
if updateToLatest {
7679
pkgCmd = "update"
7780
} else {
7881
pkgCmd = "resolve"
7982
}
8083
args := []string{"package", pkgCmd}
84+
args = appendBuildPath(args, buildDir)
8185
cmd := exec.Command(sb.BinPath, args...)
8286
cmd.Dir = dir
8387
if out, err := cmd.CombinedOutput(); err != nil {
8488
return fmt.Errorf("failed executing `swift package resolve`, out\n%v: %w", string(out), err)
8589
}
8690
return nil
8791
}
92+
93+
func appendBuildPath(args []string, buildDir string) []string {
94+
if buildDir == "" {
95+
return args
96+
}
97+
return append(args, "--build-path", buildDir)
98+
}

gazelle/internal/swiftbin/swift_bin_test.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ func TestSwiftBin(t *testing.T) {
1818
assert.NoError(t, err)
1919
defer os.RemoveAll(dir)
2020

21+
// Create a build directory
22+
buildDir, err := os.MkdirTemp("", "builddir")
23+
assert.NoError(t, err)
24+
defer os.RemoveAll(buildDir)
25+
2126
// Find Swift
2227
binPath, err := swiftbin.FindSwiftBinPath()
2328
assert.NoError(t, err)
@@ -29,7 +34,7 @@ func TestSwiftBin(t *testing.T) {
2934
assert.NoError(t, err)
3035

3136
// Dump the package
32-
out, err := sb.DumpPackage(dir)
37+
out, err := sb.DumpPackage(dir, buildDir)
3338
assert.NoError(t, err)
3439
var dumpMap map[string]any
3540
err = json.Unmarshal(out, &dumpMap)
@@ -56,6 +61,11 @@ func TestSwiftBin(t *testing.T) {
5661
assert.NoError(t, err)
5762
defer os.RemoveAll(dir)
5863

64+
// Create a build directory
65+
buildDir, err := os.MkdirTemp("", "builddir")
66+
assert.NoError(t, err)
67+
defer os.RemoveAll(buildDir)
68+
5969
// Find Swift
6070
binPath, err := swiftbin.FindSwiftBinPath()
6171
assert.NoError(t, err)
@@ -72,13 +82,13 @@ func TestSwiftBin(t *testing.T) {
7282
assert.NoError(t, err)
7383

7484
// Resolve the package
75-
err = sb.ResolvePackage(dir, false)
85+
err = sb.ResolvePackage(dir, buildDir, false)
7686
assert.NoError(t, err)
7787
resolvedPkgPath := filepath.Join(dir, "Package.resolved")
7888
assert.FileExists(t, resolvedPkgPath)
7989

8090
// Resolve the package to their latest eligible version
81-
err = sb.ResolvePackage(dir, true)
91+
err = sb.ResolvePackage(dir, buildDir, true)
8292
assert.NoError(t, err)
8393
})
8494
}

gazelle/internal/swiftpkg/package_info.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ type PackageInfo struct {
2525
}
2626

2727
// NewPackageInfo returns the Swift package information from a Swift package on disk.
28-
func NewPackageInfo(sw swiftbin.Executor, dir string) (*PackageInfo, error) {
29-
dump, err := sw.DumpPackage(dir)
28+
func NewPackageInfo(sw swiftbin.Executor, dir, buildDir string) (*PackageInfo, error) {
29+
dump, err := sw.DumpPackage(dir, buildDir)
3030
if err != nil {
3131
return nil, err
3232
}

0 commit comments

Comments
 (0)