MCPcopy
hub / github.com/shyiko/jabba / normalizePathToBinJava

Function normalizePathToBinJava

command/install.go:253–307  ·  view source on GitHub ↗

**/{Contents/Home,Home,}bin/java -> /Contents/Home/bin/java

(dir string, goos string)

Source from the content-addressed store, hash-verified

251
252// **/{Contents/Home,Home,}bin/java -> <dir>/Contents/Home/bin/java
253func normalizePathToBinJava(dir string, goos string) error {
254 dir = filepath.Clean(dir)
255 if _, err := os.Stat(expectedJavaPath(dir, goos)); os.IsNotExist(err) {
256 java := "java"
257 if goos == "windows" {
258 java = "java.exe"
259 }
260 var javaPath string
261 for it := fileiter.New(dir, fileiter.BreadthFirst()); it.Next(); {
262 if err := it.Err(); err != nil {
263 return err
264 }
265 if !it.IsDir() && filepath.Base(it.Dir()) == "bin" && it.Name() == java {
266 javaPath = filepath.Join(it.Dir(), it.Name())
267 break
268 }
269 }
270 if javaPath != "" {
271 log.Debugf("Found %s", javaPath)
272 tmp := dir + "~"
273 javaPath = strings.Replace(javaPath, dir, tmp, 1)
274 log.Debugf("Moving %s to %s", dir, tmp)
275 if err := os.Rename(dir, tmp); err != nil {
276 return err
277 }
278 defer func() {
279 log.Debugf("Removing %s", tmp)
280 os.RemoveAll(tmp)
281 }()
282 homeDir := filepath.Dir(filepath.Dir(javaPath))
283 var src, dst string
284 if goos == "darwin" {
285 if filepath.Base(homeDir) == "Home" {
286 src = filepath.Dir(homeDir)
287 dst = filepath.Join(dir, "Contents")
288 } else {
289 src = homeDir
290 dst = filepath.Join(dir, "Contents", "Home")
291 }
292 } else {
293 src = homeDir
294 dst = dir
295 }
296 log.Debugf("Moving %s to %s", src, dst)
297 if err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil {
298 return err
299 }
300 if err = os.Rename(src, dst); err != nil {
301 return err
302 }
303 }
304 return assertJavaDistribution(dir, goos)
305 }
306 return nil
307}
308
309func expectedJavaPath(dir string, goos string) string {
310 var osSpecificSubDir = ""

Callers 4

installOnDarwinFunction · 0.85
installOnLinuxFunction · 0.85
installOnWindowsFunction · 0.85
TestBinJavaRelocationFunction · 0.85

Calls 7

expectedJavaPathFunction · 0.85
assertJavaDistributionFunction · 0.85
NextMethod · 0.80
ErrMethod · 0.80
DirMethod · 0.80
IsDirMethod · 0.45
NameMethod · 0.45

Tested by 1

TestBinJavaRelocationFunction · 0.68