4 Star 0 Fork 0

Gitee 极速下载/powerline-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/justjanne/powerline-go
克隆/下载
segment-gcp.go 2.71 KB
一键复制 编辑 原始数据 按行查看 历史
package main
import (
"bytes"
"fmt"
"io/ioutil"
"log"
"os"
"os/exec"
"runtime"
"strings"
pwl "github.com/justjanne/powerline-go/powerline"
)
const gcloudCoreSectionHeader = "\n[core]\n"
func getCloudConfigDir() (string, error) {
p, err := os.UserHomeDir()
if err != nil {
return "", err
}
if runtime.GOOS != "windows" {
p += "/.config"
}
p += "/gcloud"
return p, nil
}
func getActiveGCloudConfig(configDir string) (string, error) {
activeConfigPath := configDir + "/active_config"
stat, err := os.Stat(activeConfigPath)
if (err == nil && os.IsNotExist(err)) || (err == nil && stat.IsDir()) {
return "default", nil
} else if err != nil {
return "", err
}
contents, err := ioutil.ReadFile(activeConfigPath)
if err != nil {
return "", err
}
config := strings.TrimSpace(string(contents))
if config == "" {
config = "default"
}
return config, nil
}
func getGCPProjectFromGCloud() (string, error) {
out, err := exec.Command("gcloud", "config", "list", "project", "--format", "value(core.project)").Output()
if err != nil {
return "", err
}
return strings.TrimSuffix(string(out), "\n"), nil
}
func getGCPProjectFromFile() (string, error) {
configDir, err := getCloudConfigDir()
if err != nil {
return "", err
}
activeConfig, err := getActiveGCloudConfig(configDir)
if err != nil {
return "", err
}
configPath := configDir + "/configurations/config_" + activeConfig
stat, err := os.Stat(configPath)
if err != nil {
return "", err
} else if stat.IsDir() {
return "", fmt.Errorf("%s is a directory", configPath)
}
b, err := ioutil.ReadFile(configPath)
if err != nil {
return "", err
}
b = append([]byte("\n"), b...)
coreStart := bytes.Index(b, []byte(gcloudCoreSectionHeader))
if coreStart == -1 {
return "", fmt.Errorf("could not find [core] section in %s", configPath)
}
b = b[coreStart+len(gcloudCoreSectionHeader):]
coreEnd := bytes.Index(b, []byte("\n["))
if coreEnd != -1 {
b = b[:coreEnd]
}
lines := bytes.Split(b[coreStart+len(gcloudCoreSectionHeader):coreEnd], []byte("\n"))
for _, line := range lines {
parts := bytes.Split(line, []byte("="))
if len(parts) == 2 {
if strings.TrimSpace(string(parts[0])) == "project" {
return strings.TrimSpace(string(parts[1])), nil
}
}
}
return "", nil
}
func getGCPProject() (string, error) {
if project, err := getGCPProjectFromFile(); err == nil {
return project, nil
} else {
return getGCPProjectFromGCloud()
}
}
func segmentGCP(p *powerline) []pwl.Segment {
project, err := getGCPProject()
if err != nil {
log.Fatal(err)
}
if project == "" {
return []pwl.Segment{}
}
return []pwl.Segment{{
Name: "gcp",
Content: project,
Foreground: p.theme.GCPFg,
Background: p.theme.GCPBg,
}}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mirrors/powerline-go.git
git@gitee.com:mirrors/powerline-go.git
mirrors
powerline-go
powerline-go
main

搜索帮助