mirror of
https://github.com/kevin-DL/revel-cmd.git
synced 2026-01-16 20:54:37 +00:00
Added a version file to revel/cmd
Updated import path detection to make it smarter. You can now use absolute paths etc..
This commit is contained in:
@@ -1,5 +1,24 @@
|
||||
package model
|
||||
|
||||
// The constants
|
||||
import (
|
||||
"go/build"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"github.com/revel/cmd/utils"
|
||||
)
|
||||
|
||||
const (
|
||||
NEW COMMAND = iota + 1
|
||||
RUN
|
||||
BUILD
|
||||
PACKAGE
|
||||
CLEAN
|
||||
TEST
|
||||
VERSION
|
||||
)
|
||||
|
||||
type (
|
||||
// The Revel command type
|
||||
COMMAND int
|
||||
@@ -28,13 +47,13 @@ type (
|
||||
// The build command
|
||||
Build struct {
|
||||
TargetPath string `short:"t" long:"target-path" description:"Path to target folder. Folder will be completely deleted if it exists" required:"true"`
|
||||
ImportPath string `short:"a" long:"application-path" description:"Path to applicaiton folder" required:"true"`
|
||||
ImportPath string `short:"a" long:"application-path" description:"Path to applicaiton folder" `
|
||||
Mode string `short:"m" long:"run-mode" description:"The mode to run the application in"`
|
||||
CopySource bool `short:"s" long:"include-source" description:"Copy the source code as well"`
|
||||
} `command:"build"`
|
||||
// The run command
|
||||
Run struct {
|
||||
ImportPath string `short:"a" long:"application-path" description:"Path to applicaiton folder" required:"true"`
|
||||
ImportPath string `short:"a" long:"application-path" description:"Path to applicaiton folder" `
|
||||
Mode string `short:"m" long:"run-mode" description:"The mode to run the application in"`
|
||||
Port string `short:"p" long:"port" description:"The port to listen"`
|
||||
NoProxy bool `short:"n" long:"no-proxy" description:"True if proxy server should not be started. This will only update the main and routes files on change"`
|
||||
@@ -42,17 +61,17 @@ type (
|
||||
// The package command
|
||||
Package struct {
|
||||
Mode string `short:"m" long:"run-mode" description:"The mode to run the application in"`
|
||||
ImportPath string `short:"a" long:"application-path" description:"Path to applicaiton folder" required:"true"`
|
||||
ImportPath string `short:"a" long:"application-path" description:"Path to applicaiton folder" `
|
||||
CopySource bool `short:"s" long:"include-source" description:"Copy the source code as well"`
|
||||
} `command:"package"`
|
||||
// The clean command
|
||||
Clean struct {
|
||||
ImportPath string `short:"a" long:"application-path" description:"Path to applicaiton folder" required:"true"`
|
||||
ImportPath string `short:"a" long:"application-path" description:"Path to applicaiton folder" `
|
||||
} `command:"clean"`
|
||||
// The test command
|
||||
Test struct {
|
||||
Mode string `short:"m" long:"run-mode" description:"The mode to run the application in"`
|
||||
ImportPath string `short:"a" long:"application-path" description:"Path to applicaiton folder" required:"true"`
|
||||
ImportPath string `short:"a" long:"application-path" description:"Path to applicaiton folder" `
|
||||
Function string `short:"f" long:"suite-function" description:"The suite.function"`
|
||||
} `command:"test"`
|
||||
// The version command
|
||||
@@ -61,3 +80,59 @@ type (
|
||||
} `command:"version"`
|
||||
}
|
||||
)
|
||||
|
||||
// Updates the import path depending on the command
|
||||
func (c *CommandConfig) UpdateImportPath() bool {
|
||||
var importPath string
|
||||
required := true
|
||||
switch c.Index {
|
||||
case NEW:
|
||||
importPath = c.New.ImportPath
|
||||
case RUN:
|
||||
importPath = c.Run.ImportPath
|
||||
case BUILD:
|
||||
importPath = c.Build.ImportPath
|
||||
case PACKAGE:
|
||||
importPath = c.Package.ImportPath
|
||||
case CLEAN:
|
||||
importPath = c.Clean.ImportPath
|
||||
case TEST:
|
||||
importPath = c.Test.ImportPath
|
||||
case VERSION:
|
||||
importPath = c.Version.ImportPath
|
||||
required = false
|
||||
}
|
||||
|
||||
if len(importPath) == 0 || filepath.IsAbs(importPath) || importPath[0] == '.' {
|
||||
// Try to determine the import path from the GO paths and the command line
|
||||
currentPath, err := os.Getwd()
|
||||
if len(importPath) > 0 {
|
||||
if importPath[0] == '.' {
|
||||
// For a relative path
|
||||
importPath = filepath.Join(currentPath, importPath)
|
||||
}
|
||||
// For an absolute path
|
||||
currentPath, _ = filepath.Abs(importPath)
|
||||
|
||||
}
|
||||
if err == nil {
|
||||
for _, path := range strings.Split(build.Default.GOPATH, string(filepath.ListSeparator)) {
|
||||
utils.Logger.Infof("Checking import path %s with %s", currentPath, path)
|
||||
if strings.HasPrefix(currentPath, path) {
|
||||
importPath = currentPath[len(path) + 1:]
|
||||
// Remove the source from the path if it is there
|
||||
if len(importPath)>4 && strings.ToLower(importPath[0:4]) == "src/" {
|
||||
importPath = importPath[4:]
|
||||
} else if importPath == "src" {
|
||||
importPath = ""
|
||||
}
|
||||
utils.Logger.Info("Updated import path", "path", importPath)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
c.ImportPath = importPath
|
||||
utils.Logger.Info("Returned import path", "path", importPath)
|
||||
return (len(importPath) > 0 || !required)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user