Skip to content

Commit 6fc1c63

Browse files
author
Andreas Sacher
committed
TASK: map classes in paths with scheme [...]/DistributionPackages/<package>/Classes/<path_and_file>.php
1 parent 68ccca2 commit 6fc1c63

File tree

2 files changed

+27
-27
lines changed

2 files changed

+27
-27
lines changed

flowpathmapper/flowpathmapper.go

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,13 @@ const (
2727
)
2828

2929
var (
30-
regexpPhpFile = regexp.MustCompile(`(?://)?(/[^ ]*\.php)`)
31-
regexpFilename__Win = regexp.MustCompile(`filename=["]?file:///(\S+)/Data/Temporary/.+?/Cache/Code/Flow_Object_Classes/([^"]*)\.php`)
32-
regexpFilename__Unix = regexp.MustCompile(`filename=["]?file://(\S+)/Data/Temporary/.+?/Cache/Code/Flow_Object_Classes/([^"]*)\.php`)
33-
regexpPathAndFilename = regexp.MustCompile(`(?m)^# PathAndFilename: (.*)$`)
34-
regexpPackageClass = regexp.MustCompile(`(.*?)/Packages/[^/]*/(.*?)/Classes/(.*).php`)
35-
regexpDot = regexp.MustCompile(`[\./]`)
30+
regexpPhpFile = regexp.MustCompile(`(?://)?(/[^ ]*\.php)`)
31+
regexpFilename__Win = regexp.MustCompile(`filename=["]?file:///(\S+)/Data/Temporary/.+?/Cache/Code/Flow_Object_Classes/([^"]*)\.php`)
32+
regexpFilename__Unix = regexp.MustCompile(`filename=["]?file://(\S+)/Data/Temporary/.+?/Cache/Code/Flow_Object_Classes/([^"]*)\.php`)
33+
regexpPathAndFilename = regexp.MustCompile(`(?m)^# PathAndFilename: (.*)$`)
34+
regexpPackageClass = regexp.MustCompile(`(.*?)/Packages/[^/]*/(.*?)/Classes/(.*).php`)
35+
regexpDistributionPackageClass = regexp.MustCompile(`(.*?)/DistributionPackages/(.*?)/Classes/(.*).php`)
36+
regexpDot = regexp.MustCompile(`[\./]`)
3637
)
3738

3839
func init() {
@@ -149,11 +150,16 @@ func (p *PathMapper) getRealFilename(path string) string {
149150
}
150151

151152
func (p *PathMapper) mapPath(originalPath string) string {
152-
if strings.Contains(originalPath, "/Packages/") {
153+
if strings.Contains(originalPath, "/Packages/") ||
154+
strings.Contains(originalPath, "/DistributionPackages/") {
153155
p.logger.Debug("Path %s is a Flow Package file", originalPath)
154-
cachePath := p.getCachePath(p.buildClassNameFromPath(originalPath))
156+
basePath, className, err := pathToClassPath(originalPath)
157+
if err != nil {
158+
p.logger.Warn(err.Error())
159+
return originalPath
160+
}
161+
cachePath := p.getCachePath(basePath, className)
155162
realPath := p.getRealFilename(cachePath)
156-
var err error
157163
if len(p.config.LocalRoot) == 0 {
158164
_, err = os.Stat(realPath)
159165
}
@@ -206,23 +212,16 @@ func (p *PathMapper) readOriginalPathFromCache(path, basePath string) string {
206212
return path
207213
}
208214

209-
func (p *PathMapper) buildClassNameFromPath(path string) (string, string) {
210-
basePath, className := pathToClassPath(path)
211-
if className == "" {
212-
// Other (vendor) packages, todo add support for vendor package with Flow proxy class
213-
p.logger.Warn(h, "Vendor package detected")
214-
p.logger.Warn("Class mapping not supported currently for path: %s, \n", path)
215-
}
216-
return basePath, className
217-
}
218-
219215
// Convert absolute path to class path (internal use only)
220-
func pathToClassPath(path string) (string, string) {
216+
func pathToClassPath(path string) (string, string, error) {
221217
var (
222218
basePath string
223219
classPath string
224220
)
225221
match := regexpPackageClass.FindStringSubmatch(path)
222+
if len(match) != 4 {
223+
match = regexpDistributionPackageClass.FindStringSubmatch(path)
224+
}
226225
if len(match) == 4 {
227226
// Flow standard packages
228227
packagePath := regexpDot.ReplaceAllString(match[2], "/")
@@ -234,9 +233,7 @@ func pathToClassPath(path string) (string, string) {
234233
basePath = match[1]
235234
classPath = regexpDot.ReplaceAllString(classPath, "_")
236235
} else {
237-
// Other (vendor) packages, todo add support for vendor package with Flow proxy class
238-
basePath = path
239-
classPath = ""
236+
return "", "", fmt.Errorf("path %s does not match known class path patterns, may be an (unsupported) vendor package", path)
240237
}
241-
return basePath, classPath
238+
return basePath, classPath, nil
242239
}
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
package flowpathmapper
22

33
import (
4-
"github.com/stretchr/testify/assert"
54
"testing"
5+
6+
"github.com/stretchr/testify/assert"
67
)
78

89
func TestBuildClassNameFromPathSupportPSR2(t *testing.T) {
9-
basePath, className := pathToClassPath("/your/path/sites/dev/master-dev.neos-workplace.dev/Packages/Application/Ttree.FlowDebugProxyHelper/Classes/Ttree/FlowDebugProxyHelper/ProxyClassMapperComponent.php")
10+
basePath, className, err := pathToClassPath("/your/path/sites/dev/master-dev.neos-workplace.dev/Packages/Application/Ttree.FlowDebugProxyHelper/Classes/Ttree/FlowDebugProxyHelper/ProxyClassMapperComponent.php")
1011
assert.Equal(t, "/your/path/sites/dev/master-dev.neos-workplace.dev", basePath, "they should be equal")
1112
assert.Equal(t, "Ttree_FlowDebugProxyHelper_ProxyClassMapperComponent", className, "they should be equal")
13+
assert.Equal(t, nil, err, "there should not be an error")
1214
}
1315

1416
func TestBuildClassNameFromPathSupportPSR4(t *testing.T) {
15-
basePath, className := pathToClassPath("/your/path/sites/dev/master-dev.neos-workplace.dev/Packages/Application/Ttree.FlowDebugProxyHelper/Classes/ProxyClassMapperComponent.php")
17+
basePath, className, err := pathToClassPath("/your/path/sites/dev/master-dev.neos-workplace.dev/Packages/Application/Ttree.FlowDebugProxyHelper/Classes/ProxyClassMapperComponent.php")
1618
assert.Equal(t, "/your/path/sites/dev/master-dev.neos-workplace.dev", basePath, "they should be equal")
1719
assert.Equal(t, "Ttree_FlowDebugProxyHelper_ProxyClassMapperComponent", className, "they should be equal")
20+
assert.Equal(t, nil, err, "there should not be an error")
1821
}

0 commit comments

Comments
 (0)