aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2018-06-03 17:06:30 +0700
committerShulhan <ms@kilabit.info>2018-06-03 23:51:33 +0700
commitb30109159d464ba022608d6f566cfc61bc1c8b26 (patch)
tree56855c8483f97ccbca7ed8eaa4c138eacd93652e
parentccbdc4ab14f8c1ffcf369e157502dcb38d4fc90b (diff)
downloadbeku-b30109159d464ba022608d6f566cfc61bc1c8b26.tar.xz
NewPackage(): use golang tools/go/vcs to get remote URL
This will allow beku to handle custom import URL.
-rw-r--r--beku.go1
-rw-r--r--beku_test.go6
-rw-r--r--env.go21
-rw-r--r--package.go30
-rw-r--r--package_test.go11
5 files changed, 54 insertions, 15 deletions
diff --git a/beku.go b/beku.go
index 2cb6514..2330c22 100644
--- a/beku.go
+++ b/beku.go
@@ -60,6 +60,7 @@ var (
errDBPackageName = "missing package name, line %d at %s"
errDirNotEmpty = "directory %s is not empty"
errExcluded = "Package '%s' is in excluded list\n"
+ errVCS = "Unknown VCS mode %s"
)
var (
diff --git a/beku_test.go b/beku_test.go
index 62e8183..5fb7f81 100644
--- a/beku_test.go
+++ b/beku_test.go
@@ -112,9 +112,9 @@ func TestMain(m *testing.M) {
os.Exit(1)
}
- testGitPkgCur = NewPackage(testGitRepo, testGitRepo, VCSModeGit)
- testGitPkgNew = NewPackage(testGitRepo, testGitRepo, VCSModeGit)
- testGitPkgShare = NewPackage(testGitRepoShare, testGitRepoShare, VCSModeGit)
+ testGitPkgCur, _ = NewPackage(testGitRepo, testGitRepo, VCSModeGit)
+ testGitPkgNew, _ = NewPackage(testGitRepo, testGitRepo, VCSModeGit)
+ testGitPkgShare, _ = NewPackage(testGitRepoShare, testGitRepoShare, VCSModeGit)
// Always set the git test repo to latest version.
testEnv.NoConfirm = true
diff --git a/env.go b/env.go
index 53bc4fa..0219b30 100644
--- a/env.go
+++ b/env.go
@@ -223,7 +223,10 @@ func (env *Env) GetPackage(importPath string) (pkg *Package, err error) {
return
}
- pkg = NewPackage(importPath, importPath, VCSModeGit)
+ pkg, err = NewPackage(importPath, importPath, VCSModeGit)
+ if err != nil {
+ return
+ }
err = pkg.Scan()
@@ -294,7 +297,11 @@ func (env *Env) GetUnused(srcPath string) (err error) {
continue
}
- pkg = NewPackage(importPath, importPath, VCSModeGit)
+ pkg, err = NewPackage(importPath, importPath, VCSModeGit)
+ if err != nil {
+ return
+ }
+
env.pkgsUnused = append(env.pkgsUnused, pkg)
}
@@ -454,7 +461,10 @@ func (env *Env) newPackage(fullPath string, vcsMode VCSMode) (err error) {
return
}
- pkg := NewPackage(pkgName, pkgName, vcsMode)
+ pkg, err := NewPackage(pkgName, pkgName, vcsMode)
+ if err != nil {
+ return
+ }
if Debug >= DebugL2 {
fmt.Println(">>> Scanning package:", pkg.ImportPath)
@@ -1107,7 +1117,10 @@ func (env *Env) Sync(pkgName, importPath string) (err error) {
return
}
- newPkg := NewPackage(pkgName, importPath, VCSModeGit)
+ newPkg, err := NewPackage(pkgName, importPath, VCSModeGit)
+ if err != nil {
+ return
+ }
if len(version) > 0 {
newPkg.Version = version
diff --git a/package.go b/package.go
index 9035886..29c3c39 100644
--- a/package.go
+++ b/package.go
@@ -15,6 +15,7 @@ import (
"strings"
"github.com/shuLhan/share/lib/ini"
+ "golang.org/x/tools/go/vcs"
)
//
@@ -37,15 +38,32 @@ type Package struct {
}
//
-// NewPackage create a package set the package version, tag status, and dependencies.
+// NewPackage create a package set the package version, tag status, and
+// dependencies.
//
func NewPackage(pkgName, importPath string, vcsMode VCSMode) (
- pkg *Package,
+ pkg *Package, err error,
) {
+ repoRoot, err := vcs.RepoRootForImportPath(pkgName, Debug >= DebugL2)
+ if err != nil {
+ fmt.Fprintf(defStderr, "NewPackage: error: %s\n", err.Error())
+ fmt.Fprintf(defStderr, "NewPackage: skip %s\n", pkgName)
+ return
+ }
+
+ if Debug >= DebugL2 {
+ fmt.Printf("NewPackage: %+v\n", *repoRoot)
+ }
+
+ if repoRoot.VCS.Cmd != valVCSModeGit {
+ err = fmt.Errorf(errVCS, repoRoot.VCS.Cmd)
+ return nil, err
+ }
+
pkg = &Package{
- ImportPath: importPath,
- RemoteURL: "https://" + pkgName,
- FullPath: filepath.Join(build.Default.GOPATH, dirSrc, importPath),
+ ImportPath: repoRoot.Root,
+ RemoteURL: repoRoot.Repo,
+ FullPath: filepath.Join(build.Default.GOPATH, dirSrc, repoRoot.Root),
vcs: vcsMode,
state: packageStateNew,
}
@@ -53,6 +71,8 @@ func NewPackage(pkgName, importPath string, vcsMode VCSMode) (
switch vcsMode {
case VCSModeGit:
pkg.RemoteName = gitDefRemoteName
+ default:
+ err = fmt.Errorf(errVCS, vcsMode)
}
return
diff --git a/package_test.go b/package_test.go
index 46bd5de..1bbf36f 100644
--- a/package_test.go
+++ b/package_test.go
@@ -29,7 +29,7 @@ func testPackageRemove(t *testing.T) {
t.Log(c.desc)
if len(c.pkgName) > 0 {
- c.pkg = NewPackage(c.pkgName, c.pkgName, VCSModeGit)
+ c.pkg, _ = NewPackage(c.pkgName, c.pkgName, VCSModeGit)
}
err := c.pkg.Remove()
@@ -718,13 +718,14 @@ func testUpdateMissingDep(t *testing.T) {
func testPackageGoClean(t *testing.T) {
cases := []struct {
desc string
+ pkgName string
pkg *Package
pkgBin string
expErr string
expBinErr string
}{{
- desc: `With package not exist`,
- pkg: NewPackage(testPkgNotExist, testPkgNotExist, VCSModeGit),
+ desc: `With package not exist`,
+ pkgName: testPkgNotExist,
}, {
desc: `With package exist`,
pkg: testGitPkgCur,
@@ -736,6 +737,10 @@ func testPackageGoClean(t *testing.T) {
for _, c := range cases {
t.Log(c.desc)
+ if len(c.pkgName) > 0 {
+ c.pkg, _ = NewPackage(c.pkgName, c.pkgName, VCSModeGit)
+ }
+
err = c.pkg.GoClean()
if err != nil {
test.Assert(t, "err", c.expErr, err, true)