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  }