package ssh import ( "errors" "regexp" ) type GitCommand struct { Command string Args string } var ErrInvalidCommand = errors.New("Not a Git command.") // git-upload-pack 'user_loves_bananas/website' var gitCommandRx = regexp.MustCompile(`^(git-upload-pack|git-receive-pack|git-upload-archive) '~([A-Za-z0-9_][A-Za-z0-9_.-]*/[A-Za-z0-9_][A-Za-z0-9_.-]*)'$`) func parseGitCommand(raw string) (GitCommand, error) { matches := gitCommandRx.FindStringSubmatch(raw) if matches == nil { return GitCommand{}, ErrInvalidCommand } return GitCommand{ Command: matches[1], Args: matches[2], // guaranteed to be in "user/repo" form }, nil }