Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/no-carrier.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChris Rebert <code@rebertia.com>2014-10-31 10:22:34 +0300
committerChris Rebert <code@rebertia.com>2014-10-31 10:25:59 +0300
commitfca34b188bf9953ff5539d2f000d31e8d22fb385 (patch)
tree0572eb8e5573d6a8bccf8734d6458ff8b33a216a /src
initial scaffolding
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/com/getbootstrap/no_carrier/Main.scala41
-rw-r--r--src/main/scala/com/getbootstrap/no_carrier/github/Credentials.scala11
-rw-r--r--src/main/scala/com/getbootstrap/no_carrier/github/IssueFilters.scala12
-rw-r--r--src/main/scala/com/getbootstrap/no_carrier/github/IssueLabel.scala3
-rw-r--r--src/main/scala/com/getbootstrap/no_carrier/github/IssueNumber.scala3
-rw-r--r--src/main/scala/com/getbootstrap/no_carrier/github/issue_state/IssueStateForSearch.scala18
-rw-r--r--src/main/scala/com/getbootstrap/no_carrier/github/issues_filter/IssuesFilter.scala20
-rw-r--r--src/main/scala/com/getbootstrap/no_carrier/github/util/package.scala26
8 files changed, 134 insertions, 0 deletions
diff --git a/src/main/scala/com/getbootstrap/no_carrier/Main.scala b/src/main/scala/com/getbootstrap/no_carrier/Main.scala
new file mode 100644
index 0000000..6d08e54
--- /dev/null
+++ b/src/main/scala/com/getbootstrap/no_carrier/Main.scala
@@ -0,0 +1,41 @@
+package com.getbootstrap.no_carrier
+
+import scala.util.{Success,Failure}
+import scala.util.Try
+import org.eclipse.egit.github.core.RepositoryId
+import com.getbootstrap.no_carrier.github.{IssueFilters, IssueLabel, Credentials}
+import com.getbootstrap.no_carrier.github.issues_filter.{All=>AllIssues}
+import com.getbootstrap.no_carrier.github.issue_state.{All=>OpenOrClosed}
+import com.getbootstrap.no_carrier.github.util._
+
+
+object Main extends App {
+ val arguments = args.toSeq
+ val argsPort = arguments match {
+ case Seq(portStr: String) => {
+ Try{ portStr.toInt } match {
+ case Failure(_) => {
+ System.err.println("USAGE: no-carrier <username> <password> <owner/repo> <label> <duration>")
+ System.exit(1)
+ None // dead code
+ }
+ case Success(portNum) => Some(portNum)
+ }
+ }
+ case Seq() => None
+ }
+ implicit val repoId = RepositoryId.createFromId("twbs/bootstrap")
+ val credentials = Credentials("username", "pass")
+ val client = credentials.client
+ implicit val issueService = client.issuesService
+ val labels = Set(new IssueLabel("awaiting reply"))
+ val filters = IssueFilters(filter = AllIssues, state = OpenOrClosed, labels = labels)
+ val issues = issueService.issuesWhere(repoId, filters)
+ for { issue <- issues } {
+ for { event <- issue.events } {
+ event.getEvent
+ "labeled"
+ "unlabeled"
+ }
+ }
+}
diff --git a/src/main/scala/com/getbootstrap/no_carrier/github/Credentials.scala b/src/main/scala/com/getbootstrap/no_carrier/github/Credentials.scala
new file mode 100644
index 0000000..6dc73fc
--- /dev/null
+++ b/src/main/scala/com/getbootstrap/no_carrier/github/Credentials.scala
@@ -0,0 +1,11 @@
+package com.getbootstrap.no_carrier.github
+
+import org.eclipse.egit.github.core.client.GitHubClient
+
+case class Credentials(username: String, password: String) {
+ def client = {
+ val c = new GitHubClient()
+ c.setCredentials(username, password)
+ c
+ }
+}
diff --git a/src/main/scala/com/getbootstrap/no_carrier/github/IssueFilters.scala b/src/main/scala/com/getbootstrap/no_carrier/github/IssueFilters.scala
new file mode 100644
index 0000000..816294b
--- /dev/null
+++ b/src/main/scala/com/getbootstrap/no_carrier/github/IssueFilters.scala
@@ -0,0 +1,12 @@
+package com.getbootstrap.no_carrier.github
+
+import com.getbootstrap.no_carrier.github.issue_state.IssueStateForSearch
+import com.getbootstrap.no_carrier.github.issues_filter.IssuesFilter
+
+case class IssueFilters(filter: IssuesFilter, state: IssueStateForSearch, labels: Set[IssueLabel]) {
+ def asFilterData: Map[String, String] = Map(
+ "filter" -> filter.codename,
+ "state" -> state.codename,
+ "labels" -> labels.map{ label => label.name }.mkString(",")
+ )
+}
diff --git a/src/main/scala/com/getbootstrap/no_carrier/github/IssueLabel.scala b/src/main/scala/com/getbootstrap/no_carrier/github/IssueLabel.scala
new file mode 100644
index 0000000..745852e
--- /dev/null
+++ b/src/main/scala/com/getbootstrap/no_carrier/github/IssueLabel.scala
@@ -0,0 +1,3 @@
+package com.getbootstrap.no_carrier.github
+
+class IssueLabel(val name: String) extends AnyVal
diff --git a/src/main/scala/com/getbootstrap/no_carrier/github/IssueNumber.scala b/src/main/scala/com/getbootstrap/no_carrier/github/IssueNumber.scala
new file mode 100644
index 0000000..8a26771
--- /dev/null
+++ b/src/main/scala/com/getbootstrap/no_carrier/github/IssueNumber.scala
@@ -0,0 +1,3 @@
+package com.getbootstrap.no_carrier.github
+
+class IssueNumber(val number: Int) extends AnyVal
diff --git a/src/main/scala/com/getbootstrap/no_carrier/github/issue_state/IssueStateForSearch.scala b/src/main/scala/com/getbootstrap/no_carrier/github/issue_state/IssueStateForSearch.scala
new file mode 100644
index 0000000..ae0c5a7
--- /dev/null
+++ b/src/main/scala/com/getbootstrap/no_carrier/github/issue_state/IssueStateForSearch.scala
@@ -0,0 +1,18 @@
+package com.getbootstrap.no_carrier.github.issue_state
+
+sealed trait IssueStateForSearch {
+ def codename: String
+}
+
+object All extends IssueStateForSearch {
+ override def codename = "all"
+}
+
+sealed trait IssueState extends IssueStateForSearch
+
+object Open extends IssueState {
+ override def codename = "open"
+}
+object Closed extends IssueState {
+ override def codename = "closed"
+}
diff --git a/src/main/scala/com/getbootstrap/no_carrier/github/issues_filter/IssuesFilter.scala b/src/main/scala/com/getbootstrap/no_carrier/github/issues_filter/IssuesFilter.scala
new file mode 100644
index 0000000..4db0497
--- /dev/null
+++ b/src/main/scala/com/getbootstrap/no_carrier/github/issues_filter/IssuesFilter.scala
@@ -0,0 +1,20 @@
+package com.getbootstrap.no_carrier.github.issues_filter
+
+sealed trait IssuesFilter {
+ def codename: String
+}
+object AssignedToYou extends IssuesFilter {
+ override val codename = "assigned"
+}
+object CreatedByYou extends IssuesFilter {
+ override val codename = "created"
+}
+object MentioningYou extends IssuesFilter {
+ override val codename = "mentioned"
+}
+object SubscribedToByYou extends IssuesFilter {
+ override val codename = "subscribed"
+}
+object All extends IssuesFilter {
+ override val codename = "all"
+}
diff --git a/src/main/scala/com/getbootstrap/no_carrier/github/util/package.scala b/src/main/scala/com/getbootstrap/no_carrier/github/util/package.scala
new file mode 100644
index 0000000..be6da50
--- /dev/null
+++ b/src/main/scala/com/getbootstrap/no_carrier/github/util/package.scala
@@ -0,0 +1,26 @@
+package com.getbootstrap.no_carrier.github
+
+import scala.collection.JavaConverters._
+import org.eclipse.egit.github.core.{RepositoryId, Issue}
+import org.eclipse.egit.github.core.client.GitHubClient
+import org.eclipse.egit.github.core.service.IssueService
+
+package object util {
+ implicit class RichClient(client: GitHubClient) {
+ def issuesService = new IssueService(client)
+ }
+ implicit class RichIssueService(issueService: IssueService) {
+ private def pageIssues(repo: RepositoryId, filters: IssueFilters) = issueService.pageIssues(repo, filters.asFilterData.asJava)
+ def issuesWhere(repo: RepositoryId, filters: IssueFilters): Iterator[Issue] = {
+ val pageIter = pageIssues(repo, filters)
+ val issuesIter = pageIter.iterator().asScala.flatten
+ issuesIter
+ }
+ private def eventPages(repo: RepositoryId, issueNum: IssueNumber) = issueService.pageIssueEvents(repo.getOwner, repo.getName, issueNum.number)
+ def eventsFor(repo: RepositoryId, issueNum: IssueNumber) = issueService.eventPages(repo, issueNum).iterator().asScala.flatten
+ }
+ implicit class RichIssue(issue: Issue) {
+ def number: IssueNumber = new IssueNumber(issue.getNumber)
+ def events(implicit issueService: IssueService, repo: RepositoryId) = issueService.eventsFor(repo, issue.number)
+ }
+}