X-Git-Url: http://nitlanguage.org diff --git a/contrib/github_merge.nit b/contrib/github_merge.nit index c30732f..8a2c545 100644 --- a/contrib/github_merge.nit +++ b/contrib/github_merge.nit @@ -15,19 +15,19 @@ # Query the Github PR API to perform a merge module github_merge -import github_api +import github::github_curl import template redef class Object # Factorize cast - fun json_as_a: Array[nullable Object] do return self.as(Array[nullable Object]) + fun json_as_a: JsonArray do return self.as(JsonArray) # Factorize cast - fun json_as_map: Map[String, nullable Object] do return self.as(Map[String, nullable Object]) + fun json_as_map: JsonObject do return self.as(JsonObject) end redef class GithubCurl # Get a given pull request (PR) - fun getpr(number: Int): Map[String, nullable Object] + fun getpr(number: Int): JsonObject do var pr = get_and_check("https://api.github.com/repos/privat/nit/pulls/{number}") var prm = pr.json_as_map @@ -35,7 +35,12 @@ redef class GithubCurl var statuses = get_and_check("https://api.github.com/repos/privat/nit/statuses/{sha}") prm["statuses"] = statuses print "{prm["title"].to_s}: by {prm["user"].json_as_map["login"].to_s} (# {prm["number"].to_s})" - print "\tmergable: {prm["mergeable"].to_s}" + var mergeable = prm["mergeable"] + if mergeable != null then + print "\tmergeable: {mergeable.to_s}" + else + print "\tmergeable: unknown" + end var st = prm["statuses"].json_as_a if not st.is_empty then print "\tstatus: {st[0].json_as_map["state"].to_s}" @@ -46,7 +51,7 @@ redef class GithubCurl end # Get reviewers of a PR - fun getrev(pr: Map[String, nullable Object]): Array[String] + fun getrev(pr: JsonObject): Array[String] do var number = pr["number"].as(Int) var user = pr["user"].json_as_map["login"].as(String) @@ -93,7 +98,7 @@ if args.length != 1 then var x = curl.get_and_check("https://api.github.com/repos/privat/nit/issues?labels=ok_will_merge") for y in x.json_as_a do var number = y.json_as_map["number"].as(Int) - var pr = curl.getpr(number) + curl.getpr(number) end else # With a arg, merge the PR @@ -115,12 +120,13 @@ else print "Commit {sha} not in local repository; did you fetch github?" return end - if system("git merge --no-commit {sha}") != 0 then + if system("git merge --no-ff --no-commit {sha}") != 0 then system("cp mergemsg `git rev-parse --git-dir`/MERGE_MSG") print "Problem during merge... Let's do the commit manually." return end system("git commit -F mergemsg") print "The merge is made" + mergemsg.write_to(stdout) end