aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2018-09-14 04:22:58 +0700
committerShulhan <ms@kilabit.info>2018-09-14 04:22:58 +0700
commit13cba9aa5e2566d030cf6e8a6c9c9c2855f15fe5 (patch)
treeab40e6c18e0c6bfe67a416d361287598bc8c073a
parentcb432d3137bc487e319a6670c48eeab8a99b5eed (diff)
downloadbeku-13cba9aa5e2566d030cf6e8a6c9c9c2855f15fe5.tar.xz
Add freeze methods to package
Previously, we call package Update when doing Freeze operation, which cause confusion, because Update use parameter newPkg which may change the remote URL or version.
-rw-r--r--env.go2
-rw-r--r--package.go8
-rw-r--r--package_git.go63
3 files changed, 72 insertions, 1 deletions
diff --git a/env.go b/env.go
index 130c648..63ebbbe 100644
--- a/env.go
+++ b/env.go
@@ -199,7 +199,7 @@ func (env *Env) Freeze() (err error) {
continue
}
- err = localPkg.Update(pkg)
+ err = pkg.Freeze()
if err != nil {
return
}
diff --git a/package.go b/package.go
index ee24d93..39bbbeb 100644
--- a/package.go
+++ b/package.go
@@ -127,6 +127,14 @@ func (pkg *Package) Fetch() (err error) {
return
}
+func (pkg *Package) Freeze() (err error) {
+ switch pkg.vcsMode {
+ case VCSModeGit:
+ err = pkg.gitFreeze()
+ }
+ return
+}
+
//
// GoClean will remove the package binaries and archives.
//
diff --git a/package_git.go b/package_git.go
index 042572e..12c91c2 100644
--- a/package_git.go
+++ b/package_git.go
@@ -6,10 +6,30 @@ package beku
import (
"fmt"
+ "strings"
+ "github.com/shuLhan/share/lib/debug"
"github.com/shuLhan/share/lib/git"
)
+func (pkg *Package) gitFreeze() (err error) {
+ err = git.FetchAll(pkg.FullPath)
+ if err != nil {
+ return
+ }
+ if len(pkg.RemoteBranch) == 0 {
+ err = pkg.gitGetBranch()
+ if err != nil {
+ return
+ }
+ }
+
+ err = git.CheckoutRevision(pkg.FullPath, pkg.RemoteName,
+ pkg.RemoteBranch, pkg.Version)
+
+ return
+}
+
//
// gitInstall the package into source directory.
//
@@ -58,7 +78,50 @@ func (pkg *Package) gitScan() (err error) {
}
pkg.RemoteURL, err = git.GetRemoteURL(pkg.FullPath, "")
+ if err != nil {
+ err = fmt.Errorf("gitScan: %s", err)
+ return
+ }
+ err = pkg.gitGetBranch()
+
+ return
+}
+
+func (pkg *Package) gitGetBranch() (err error) {
+ branches, err := git.RemoteBranches(pkg.FullPath)
+ if err != nil {
+ err = fmt.Errorf("gitGetBranch: %s", err)
+ return
+ }
+
+ // Select branch by version, master, or the last branch.
+ midx := -1
+ vidx := -1
+ for x := 0; x < len(branches); x++ {
+ if branches[x] == gitDefBranch {
+ midx = x
+ }
+ if branches[x][0] == 'v' {
+ if vidx < 0 {
+ vidx = x
+ continue
+ }
+ if strings.Compare(branches[vidx], branches[x]) == -1 {
+ vidx = x
+ }
+ }
+ }
+ if midx >= 0 {
+ pkg.RemoteBranch = branches[midx]
+ } else if vidx >= 0 {
+ pkg.RemoteBranch = branches[vidx]
+ } else {
+ pkg.RemoteBranch = branches[len(branches)-1]
+ }
+ if debug.Value >= 1 {
+ fmt.Printf("= gitGetBranch: %s\n", pkg.RemoteBranch)
+ }
return
}