コード例 #1
0
ファイル: checkouter.go プロジェクト: ericaro/sbr
//Update branch on actual git repo if needed
func (ch *Checkouter) UpdateBranch(delta Delta) (updated bool, err error) {

	path := ch.locate(delta.Old.rel)

	oldbranch, err := git.Branch(path)
	if err != nil {
		return
	}
	branch := delta.New.Branch()

	if branch == oldbranch {
		return false, nil // nothing to do
	}

	// we need to update
	exists, err := git.BranchExists(path, branch)
	if err != nil {
		return false, err
	}
	err = git.Checkout(path, branch, !exists)
	if err != nil {
		return false, err
	}
	return true, err
}
コード例 #2
0
ファイル: workspace.go プロジェクト: ericaro/sbr
//Scan the working dir and return subrepositories found
func (x *Workspace) Scan() (sbrs []Sub, err error) {

	sbrs = make([]Sub, 0, 100)

	for _, prj := range x.ScanRel() {
		// this is a git repo, read all three fields
		branch, err := git.Branch(prj)
		if err != nil {
			return sbrs, fmt.Errorf("%s doesn't have branches: %s", prj, err.Error())
		}
		origin, err := git.RemoteOrigin(prj)
		if err != nil {
			return sbrs, fmt.Errorf("%s doesn't declare a remote 'origin': %s", prj, err.Error())
		}
		rel, err := filepath.Rel(x.wd, prj)
		if err != nil {
			return sbrs, fmt.Errorf("%s not in the current directory %s\n", err.Error())
		}
		if rel != "." {
			sbrs = append(sbrs, New(rel, origin, branch))
		}
	}
	Sort(sbrs)
	return
}
コード例 #3
0
ファイル: workspace.go プロジェクト: ericaro/sbr
//Read returns the []Sub, as declared in the .sbr file
func (x *Workspace) Read() (sbrs []Sub, err error) {

	branch, err := git.Branch(x.wd)
	if err != nil {
		branch = "master" // default
	}

	file, err := os.Open(x.Sbrfile())
	if err != nil {
		return
	}
	defer file.Close()
	return ReadFromBranch(branch, file) // for now, just parse
}
コード例 #4
0
ファイル: subscribeCmd.go プロジェクト: ericaro/sbr
func (c *SubscribeCmd) Run(args []string) {
	wd := FindRootCmd()
	var err error

	if *c.server == "" { // no one specified use the one in config get
		*c.server, err = git.ConfigGet(wd, "ci.server")
		if err != nil {
			fmt.Printf("Error, cannot read ci remote address in git config. %s\n Use \ngit config --add ci.server <ci address>\n", err.Error())
			os.Exit(CodeMissingServerConfig)
		}
	} else { // there was one, store it
		err := git.ConfigAdd(wd, "ci.server", *c.server)
		if err != nil {
			fmt.Printf("Warning, cannot add ci remote address in git config. %v\n", err)
		}
		fmt.Printf("git config' key \"ci.server\" = %s\n", *c.server)
	}

	if *c.jobname == "" { // no one specified use the one in config get
		*c.jobname, err = git.ConfigGet(wd, "ci.job.name")
		if err != nil {
			fmt.Printf("Error, cannot read ci remote job name in git config. %s\n Use \ngit config --add ci.job.name <jobname>\n", err.Error())
			os.Exit(CodeMissingJobConfig)
		}
	} else { // there was one, store it
		git.ConfigAdd(wd, "ci.job.name", *c.jobname)
		if err != nil {
			fmt.Printf("Warning, cannot add ci remote job name in git config. %v\n", err)
		}
		fmt.Printf("git config' key \"ci.job.name\" = %s\n", *c.jobname)
	}

	cl := ci.NewClient(*c.server)

	if *c.remove { // with only remove I don't need to go further
		cl.RemoveJob(*c.jobname)
		if err != nil {
			fmt.Printf("Error, cannot delete remote job %s. %v\n", *c.jobname, err)
			os.Exit(CodeCannotDelete)
		}
		return
	}

	branch, err := git.Branch(wd)
	if err != nil {
		fmt.Printf("Error, cannot get local branch. %v\n", err)
		os.Exit(CodeMissingBranch)
	}

	remote, err := git.RemoteOrigin(wd)
	if err != nil {
		fmt.Printf("Error, cannot get remote/origin url. %v\n", err)
		os.Exit(CodeMissingRemoteOrigin)
	}
	// I now have server job name, and branch, they have been stored for later use

	if *c.force { // needs a delete first
		err := cl.RemoveJob(*c.jobname) // don't care about the error
		if err != nil {
			fmt.Printf("Warning: deletion error: %v", err)
		}
	}
	err = cl.AddJob(*c.jobname, remote, branch)
	if err != nil {
		fmt.Println(err)
		os.Exit(CodeCannotAddJob)
	}
	// notify success
	fmt.Printf("added %s %s %s\n", *c.jobname, remote, branch)
}