README: document nit_env.sh
[nit.git] / contrib / github_merge.nit
index f14b6d9..52afa49 100644 (file)
@@ -15,7 +15,7 @@
 # Query the Github PR API to perform a merge
 module github_merge
 
-import github_api
+import github::github_curl
 import template
 
 redef class Object
@@ -29,13 +29,18 @@ redef class GithubCurl
        # Get a given pull request (PR)
        fun getpr(number: Int): JsonObject
        do
-               var pr = get_and_check("https://api.github.com/repos/privat/nit/pulls/{number}")
+               var pr = get_and_check("https://api.github.com/repos/nitlang/nit/pulls/{number}")
                var prm = pr.json_as_map
                var sha = prm["head"].json_as_map["sha"].to_s
-               var statuses = get_and_check("https://api.github.com/repos/privat/nit/statuses/{sha}")
+               var statuses = get_and_check("https://api.github.com/repos/nitlang/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}"
@@ -51,8 +56,8 @@ redef class GithubCurl
                var number = pr["number"].as(Int)
                var user = pr["user"].json_as_map["login"].as(String)
                var comments = new Array[nullable Object]
-               comments.add_all(get_and_check("https://api.github.com/repos/privat/nit/issues/{number}/comments").json_as_a)
-               comments.add_all(get_and_check("https://api.github.com/repos/privat/nit/pulls/{number}/comments").json_as_a)
+               comments.add_all(get_and_check("https://api.github.com/repos/nitlang/nit/issues/{number}/comments").json_as_a)
+               comments.add_all(get_and_check("https://api.github.com/repos/nitlang/nit/pulls/{number}/comments").json_as_a)
                var logins = new Array[String]
                for c in comments do
                        var cm = c.json_as_map
@@ -63,8 +68,8 @@ redef class GithubCurl
                var res = new Array[String]
                for l in logins do
                        var u = get_and_check("https://api.github.com/users/{l}").json_as_map
-                       if not u.has_key("name") then
-                               print "No public name for user {l}"
+                       if not u.has_key("name") or u["name"] == null or not u.has_key("email")or u["email"] == null then
+                               print "No public name/email for user {l}"
                                continue
                        end
                        var r = "{u["name"].to_s} <{u["email"].to_s}>"
@@ -81,16 +86,15 @@ if "NIT_TESTING".environ == "true" then exit 0
 var auth = get_github_oauth
 
 if auth == "" then
-       print "Not github token, please configure one with"
+       print "Warning: no github oauth token, you can configure one with"
        print "    git config --add github.oauthtoken MYOAUTHTOKEN"
-       return
 end
 
-var curl = new GithubCurl(auth, "Merge-o-matic (privat/nit)")
+var curl = new GithubCurl(auth, "Merge-o-matic (nitlang/nit)")
 
 if args.length != 1 then
        # Without args, list `ok_will_merge`
-       var x = curl.get_and_check("https://api.github.com/repos/privat/nit/issues?labels=ok_will_merge")
+       var x = curl.get_and_check("https://api.github.com/repos/nitlang/nit/issues?labels=ok_will_merge")
        for y in x.json_as_a do
                var number = y.json_as_map["number"].as(Int)
                curl.getpr(number)
@@ -115,12 +119,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