github.com/pengwynn/gh@v1.0.1-0.20140118055701-14327ca3942e/commands/utils.go (about) 1 package commands 2 3 import ( 4 "github.com/jingweno/gh/github" 5 "github.com/jingweno/gh/utils" 6 "github.com/jingweno/go-octokit/octokit" 7 "io/ioutil" 8 "os" 9 "path/filepath" 10 "strings" 11 ) 12 13 type listFlag []string 14 15 func (l *listFlag) String() string { 16 return strings.Join([]string(*l), ",") 17 } 18 19 func (l *listFlag) Set(value string) error { 20 for _, flag := range strings.Split(value, ",") { 21 *l = append(*l, flag) 22 } 23 return nil 24 } 25 26 func isDir(file string) bool { 27 f, err := os.Open(file) 28 if err != nil { 29 return false 30 } 31 defer f.Close() 32 33 fi, err := f.Stat() 34 if err != nil { 35 return false 36 } 37 38 return fi.IsDir() 39 } 40 41 func parseUserBranchFromPR(pullRequest *octokit.PullRequest) (user string, branch string) { 42 userBranch := strings.SplitN(pullRequest.Head.Label, ":", 2) 43 user = userBranch[0] 44 if len(userBranch) > 1 { 45 branch = userBranch[1] 46 } else { 47 branch = pullRequest.Head.Ref 48 } 49 50 return 51 } 52 53 func hasGitRemote(name string) bool { 54 remotes, err := github.Remotes() 55 utils.Check(err) 56 for _, remote := range remotes { 57 if remote.Name == name { 58 return true 59 } 60 } 61 62 return false 63 } 64 65 func isEmptyDir(path string) bool { 66 fullPath := filepath.Join(path, "*") 67 match, _ := filepath.Glob(fullPath) 68 return match == nil 69 } 70 71 func getTitleAndBodyFromFlags(messageFlag, fileFlag string) (title, body string, err error) { 72 if messageFlag != "" { 73 title, body = readMsg(messageFlag) 74 } else if fileFlag != "" { 75 var ( 76 content []byte 77 err error 78 ) 79 80 if fileFlag == "-" { 81 content, err = ioutil.ReadAll(os.Stdin) 82 } else { 83 content, err = ioutil.ReadFile(fileFlag) 84 } 85 utils.Check(err) 86 87 title, body = readMsg(string(content)) 88 } 89 90 return 91 } 92 93 func readMsg(msg string) (title, body string) { 94 split := strings.SplitN(msg, "\n\n", 2) 95 title = strings.TrimSpace(split[0]) 96 if len(split) > 1 { 97 body = strings.TrimSpace(split[1]) 98 } 99 100 return 101 } 102 103 func runInLocalRepo(fn func(localRepo *github.GitHubRepo, project *github.Project, client *github.Client)) { 104 localRepo := github.LocalRepo() 105 project, err := localRepo.CurrentProject() 106 utils.Check(err) 107 108 client := github.NewClient(project.Host) 109 fn(localRepo, project, client) 110 111 os.Exit(0) 112 }