Make (Source|Output)Path.Join("foo").Rel() return "foo" am: 0db5568612
am: a244a33418
Change-Id: I4c73891604cfe99b39ed93b613922f7bc5b5f4b3
This commit is contained in:
commit
510005cb28
1 changed files with 15 additions and 5 deletions
|
@ -92,7 +92,7 @@ type Path interface {
|
||||||
|
|
||||||
// Rel returns the portion of the path relative to the directory it was created from. For
|
// Rel returns the portion of the path relative to the directory it was created from. For
|
||||||
// example, Rel on a PathsForModuleSrc would return the path relative to the module source
|
// example, Rel on a PathsForModuleSrc would return the path relative to the module source
|
||||||
// directory.
|
// directory, and OutputPath.Join("foo").Rel() would return "foo".
|
||||||
Rel() string
|
Rel() string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -456,6 +456,12 @@ func (p basePath) String() string {
|
||||||
return p.path
|
return p.path
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p basePath) withRel(rel string) basePath {
|
||||||
|
p.path = filepath.Join(p.path, rel)
|
||||||
|
p.rel = rel
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
// SourcePath is a Path representing a file path rooted from SrcDir
|
// SourcePath is a Path representing a file path rooted from SrcDir
|
||||||
type SourcePath struct {
|
type SourcePath struct {
|
||||||
basePath
|
basePath
|
||||||
|
@ -463,6 +469,11 @@ type SourcePath struct {
|
||||||
|
|
||||||
var _ Path = SourcePath{}
|
var _ Path = SourcePath{}
|
||||||
|
|
||||||
|
func (p SourcePath) withRel(rel string) SourcePath {
|
||||||
|
p.basePath = p.basePath.withRel(rel)
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
// safePathForSource is for paths that we expect are safe -- only for use by go
|
// safePathForSource is for paths that we expect are safe -- only for use by go
|
||||||
// code that is embedding ninja variables in paths
|
// code that is embedding ninja variables in paths
|
||||||
func safePathForSource(ctx PathContext, path string) SourcePath {
|
func safePathForSource(ctx PathContext, path string) SourcePath {
|
||||||
|
@ -589,7 +600,7 @@ func (p SourcePath) String() string {
|
||||||
// provided paths... may not use '..' to escape from the current path.
|
// provided paths... may not use '..' to escape from the current path.
|
||||||
func (p SourcePath) Join(ctx PathContext, paths ...string) SourcePath {
|
func (p SourcePath) Join(ctx PathContext, paths ...string) SourcePath {
|
||||||
path := validatePath(ctx, paths...)
|
path := validatePath(ctx, paths...)
|
||||||
return PathForSource(ctx, p.path, path)
|
return p.withRel(path)
|
||||||
}
|
}
|
||||||
|
|
||||||
// OverlayPath returns the overlay for `path' if it exists. This assumes that the
|
// OverlayPath returns the overlay for `path' if it exists. This assumes that the
|
||||||
|
@ -631,8 +642,7 @@ type OutputPath struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p OutputPath) withRel(rel string) OutputPath {
|
func (p OutputPath) withRel(rel string) OutputPath {
|
||||||
p.basePath.path = filepath.Join(p.basePath.path, rel)
|
p.basePath = p.basePath.withRel(rel)
|
||||||
p.basePath.rel = rel
|
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -660,7 +670,7 @@ func (p OutputPath) RelPathString() string {
|
||||||
// provided paths... may not use '..' to escape from the current path.
|
// provided paths... may not use '..' to escape from the current path.
|
||||||
func (p OutputPath) Join(ctx PathContext, paths ...string) OutputPath {
|
func (p OutputPath) Join(ctx PathContext, paths ...string) OutputPath {
|
||||||
path := validatePath(ctx, paths...)
|
path := validatePath(ctx, paths...)
|
||||||
return PathForOutput(ctx, p.path, path)
|
return p.withRel(path)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PathForIntermediates returns an OutputPath representing the top-level
|
// PathForIntermediates returns an OutputPath representing the top-level
|
||||||
|
|
Loading…
Reference in a new issue