コード例 #1
0
ファイル: build.go プロジェクト: pik4ez/grapeyard
func ExtractTree(repo git.Repo, branch, build_dir string) error {
	// resolve branch
	hash, err := repo.ReadRef(branch)
	if err != nil {
		return err
	}

	if _, err := os.Stat(build_dir); os.IsNotExist(err) {
		os.MkdirAll(build_dir, 0777)
	}

	// read commit object and extract tree id from it
	_, obj, err := repo.OpenObject(hash)
	if err != nil {
		return err
	}

	defer obj.Close()

	commit, err := git.ReadCommit(obj)
	if err != nil {
		return err
	}

	treeId := commit.TreeId

	// read root tree object
	_, treeObj, err := repo.OpenObject(treeId)
	if err != nil {
		return err
	}

	defer treeObj.Close()

	root, err := git.ReadTree(treeObj)
	if err != nil {
		return err
	}

	// traverse tree from root and extract content into given directory

	err = traverseExtractTree(repo, root, build_dir)
	if err != nil {
		return err
	}

	return nil
}