Fix Rel() after ReplaceExtension or InSameDir
Copying p.rel doesn't work, as rel needs to match the end of the
value in path. Apply the same transformation to p.rel as p.path.
Test: paths_test.go
Change-Id: I42d676c6c4fc18d9852c1a73f25e5a791d7553d0
diff --git a/android/paths.go b/android/paths.go
index 3366db1..afde55e 100644
--- a/android/paths.go
+++ b/android/paths.go
@@ -712,7 +712,7 @@
reportPathErrorf(ctx, "extension %q cannot contain /", ext)
}
ret := PathForOutput(ctx, pathtools.ReplaceExtension(p.path, ext))
- ret.rel = p.rel
+ ret.rel = pathtools.ReplaceExtension(p.rel, ext)
return ret
}
@@ -724,7 +724,7 @@
}
ret := PathForOutput(ctx, filepath.Dir(p.path), path)
- ret.rel = p.rel
+ ret.rel = filepath.Join(filepath.Dir(p.rel), path)
return ret
}
diff --git a/android/paths_test.go b/android/paths_test.go
index 3b6d2ec..20a00a0 100644
--- a/android/paths_test.go
+++ b/android/paths_test.go
@@ -696,22 +696,26 @@
ctx := &configErrorWrapper{
config: TestConfig("out", nil),
}
- p := PathForOutput(ctx, "system/framework/boot.art")
+ p := PathForOutput(ctx, "system/framework").Join(ctx, "boot.art")
p2 := p.ReplaceExtension(ctx, "oat")
fmt.Println(p, p2)
+ fmt.Println(p.Rel(), p2.Rel())
// Output:
// out/system/framework/boot.art out/system/framework/boot.oat
+ // boot.art boot.oat
}
func ExampleOutputPath_FileInSameDir() {
ctx := &configErrorWrapper{
config: TestConfig("out", nil),
}
- p := PathForOutput(ctx, "system/framework/boot.art")
+ p := PathForOutput(ctx, "system/framework").Join(ctx, "boot.art")
p2 := p.InSameDir(ctx, "oat", "arm", "boot.vdex")
fmt.Println(p, p2)
+ fmt.Println(p.Rel(), p2.Rel())
// Output:
// out/system/framework/boot.art out/system/framework/oat/arm/boot.vdex
+ // boot.art oat/arm/boot.vdex
}
diff --git a/dexpreopt/dexpreopt_test.go b/dexpreopt/dexpreopt_test.go
index 2a58ab9..6dfa9d2 100644
--- a/dexpreopt/dexpreopt_test.go
+++ b/dexpreopt/dexpreopt_test.go
@@ -64,7 +64,7 @@
{android.PathForOutput(ctx, "test/oat/arm/package.vdex"), "/system/app/test/oat/arm/test.vdex"},
}
- if !reflect.DeepEqual(rule.Installs(), wantInstalls) {
+ if rule.Installs().String() != wantInstalls.String() {
t.Errorf("\nwant installs:\n %v\ngot:\n %v", wantInstalls, rule.Installs())
}
}
@@ -100,7 +100,7 @@
{android.PathForOutput(ctx, "test/oat/arm/package.vdex"), "/system_other/app/test/oat/arm/test.vdex"},
}
- if !reflect.DeepEqual(rule.Installs(), wantInstalls) {
+ if rule.Installs().String() != wantInstalls.String() {
t.Errorf("\nwant installs:\n %v\ngot:\n %v", wantInstalls, rule.Installs())
}
}
@@ -123,7 +123,7 @@
{android.PathForOutput(ctx, "test/oat/arm/package.vdex"), "/system/app/test/oat/arm/test.vdex"},
}
- if !reflect.DeepEqual(rule.Installs(), wantInstalls) {
+ if rule.Installs().String() != wantInstalls.String() {
t.Errorf("\nwant installs:\n %v\ngot:\n %v", wantInstalls, rule.Installs())
}
}
diff --git a/java/dexpreopt_config.go b/java/dexpreopt_config.go
index 280b601..409b4b1 100644
--- a/java/dexpreopt_config.go
+++ b/java/dexpreopt_config.go
@@ -114,7 +114,7 @@
for _, target := range ctx.Config().Targets[android.Android] {
images[target.Arch.ArchType] = dir.Join(ctx,
- "system/framework", target.Arch.ArchType.String(), "boot.art")
+ "system/framework", target.Arch.ArchType.String()).Join(ctx, "boot.art")
}
return bootImageConfig{