diff options
Diffstat (limited to 'utils')
| -rw-r--r-- | utils/utils.go | 53 | 
1 files changed, 45 insertions, 8 deletions
| diff --git a/utils/utils.go b/utils/utils.go index 5f686f7..1f8ebb7 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -1,20 +1,20 @@  package utils  import ( +	"bytes"  	"io/ioutil"  	"log"  	"os" +	"os/exec"  	"os/user" +	"regexp" +	"strconv"  	"gopkg.in/yaml.v2"  )  var history_file string = ".git-checkout-history" -type BranchList struct { -	Branches []string -} -  func getHomeDir() string {  	usr, err := user.Current()  	if err != nil { @@ -23,6 +23,41 @@ func getHomeDir() string {  	return usr.HomeDir  } +func currentGitDir() string { +	// Check git version +	// If below 1.7.0 then exit 1. `--show-toplevel` is not available in prior +	// versions. +	// /git version (\d+\.\d+).*/ +	// Run `git rev-parse --show-toplevel` +	// Return output from the command +	cmd := exec.Command("git", "--version") +	var version_string bytes.Buffer +	cmd.Stdout = &version_string +	if err := cmd.Run(); err != nil { +		panic(err) +	} +	 +	r, _ := regexp.Compile(`git version (\d+\.\d+).*`) +	matches := r.FindStringSubmatch(version_string.String()) +	 +	version_number, _ := strconv.ParseFloat(matches[1], 64) +	if version_number >= 1.7 { +		cmd = exec.Command("git", "rev-parse", "--show-toplevel") +		var git_directory bytes.Buffer +		cmd.Stdout = &git_directory +		if err := cmd.Run(); err != nil { +			panic(err) +		} +		 +		dir_trimmed := git_directory.String() +		 +		// Trim newline at the end of the directory string +		return dir_trimmed[:len(dir_trimmed) - 1] +	} +	 +	return "" +} +  func OpenHistoryFile() (f *os.File, err error) {  	file_path := getHomeDir() + "/" + history_file  	if _, err := os.Stat(file_path); os.IsNotExist(err) { @@ -33,7 +68,6 @@ func OpenHistoryFile() (f *os.File, err error) {  }  func Store(branch string) { -	branchList := BranchList{}  	rcfile, err := OpenHistoryFile()  	if err != nil {  		log.Fatal(err) @@ -46,12 +80,15 @@ func Store(branch string) {  		log.Fatal(err)  	} +	branchList := make(map[string][]string) +	  	err = yaml.Unmarshal(data, &branchList)  	if err != nil {  		log.Fatal(err)  	} -	branchList.Branches = append([]string{branch}, branchList.Branches...) +	current_git_dir := currentGitDir() +	branchList[current_git_dir] = append([]string{branch}, branchList[current_git_dir]...)  	data, err = yaml.Marshal(&branchList)  	if err != nil { @@ -65,7 +102,7 @@ func Store(branch string) {  }  func Branches() []string { -	branchList := BranchList{} +	branchList := make(map[string][]string)  	file_path := getHomeDir() + "/" + history_file  	data, err := ioutil.ReadFile(file_path) @@ -78,5 +115,5 @@ func Branches() []string {  		log.Fatal(err)  	} -	return branchList.Branches +	return branchList[currentGitDir()]  } | 
