diff options
| author | Gubolin <gubolin@fantasymail.de> | 2014-07-30 18:23:33 +0200 |
|---|---|---|
| committer | Gubolin <gubolin@fantasymail.de> | 2014-07-30 18:23:33 +0200 |
| commit | b9ec43451b9feb0c743196e2b4c3419e5ff611f8 (patch) | |
| tree | 13a695fd0e16de1af79ab87fa2d714e4415f65ca /octokit/octokit.js | |
| parent | bfdbeca146f8d58e1f15b2b85f4feae2687d1d9f (diff) | |
| download | snap-b9ec43451b9feb0c743196e2b4c3419e5ff611f8.tar.gz snap-b9ec43451b9feb0c743196e2b4c3419e5ff611f8.zip | |
replace the Snap!Cloud with GitHub
Diffstat (limited to 'octokit/octokit.js')
| -rw-r--r-- | octokit/octokit.js | 1465 |
1 files changed, 1465 insertions, 0 deletions
diff --git a/octokit/octokit.js b/octokit/octokit.js new file mode 100644 index 0000000..40d8576 --- /dev/null +++ b/octokit/octokit.js @@ -0,0 +1,1465 @@ +(function() { + var Octokit, Promise, XMLHttpRequest, allPromises, createGlobalAndAMD, encode, err, injector, makeOctokit, newPromise, _, _ref, + _this = this, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + __slice = [].slice; + + _ = {}; + + _.isEmpty = function(object) { + return Object.keys(object).length === 0; + }; + + _.isArray = function(object) { + return !!(object != null ? object.slice : void 0); + }; + + _.defaults = function(object, values) { + var key, _i, _len, _ref, _results; + _ref = Object.keys(values); + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + key = _ref[_i]; + _results.push((function(key) { + return object[key] != null ? object[key] : object[key] = values[key]; + })(key)); + } + return _results; + }; + + _.each = function(object, fn) { + var arr, key, _i, _len, _ref, _results; + if (!object) { + return; + } + if (_.isArray(object)) { + object.forEach(fn); + } + arr = []; + _ref = Object.keys(object); + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + key = _ref[_i]; + _results.push((function(key) { + return fn(object[key]); + })(key)); + } + return _results; + }; + + _.pairs = function(object) { + var arr, key, _fn, _i, _len, _ref; + arr = []; + _ref = Object.keys(object); + _fn = function(key) { + return arr.push([key, object[key]]); + }; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + key = _ref[_i]; + _fn(key); + } + return arr; + }; + + _.map = function(object, fn) { + var arr, key, _fn, _i, _len, _ref; + if (_.isArray(object)) { + return object.map(fn); + } + arr = []; + _ref = Object.keys(object); + _fn = function(key) { + return arr.push(fn(object[key])); + }; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + key = _ref[_i]; + _fn(key); + } + return arr; + }; + + _.last = function(object, n) { + var len; + len = object.length; + return object.slice(len - n, len); + }; + + _.select = function(object, fn) { + return object.filter(fn); + }; + + _.extend = function(object, template) { + var key, _fn, _i, _len, _ref; + _ref = Object.keys(template); + _fn = function(key) { + return object[key] = template[key]; + }; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + key = _ref[_i]; + _fn(key); + } + return object; + }; + + _.toArray = function(object) { + return Array.prototype.slice.call(object); + }; + + makeOctokit = function(newPromise, allPromises, XMLHttpRequest, base64encode, userAgent) { + var Octokit, ajax, rejectedPromise, resolvedPromise; + ajax = function(options) { + return newPromise(function(resolve, reject) { + var name, value, xhr, _ref; + xhr = new XMLHttpRequest(); + xhr.dataType = options.dataType; + if (typeof xhr.overrideMimeType === "function") { + xhr.overrideMimeType(options.mimeType); + } + xhr.open(options.type, options.url); + if (options.data && 'GET' !== options.type) { + xhr.setRequestHeader('Content-Type', options.contentType); + } + _ref = options.headers; + for (name in _ref) { + value = _ref[name]; + xhr.setRequestHeader(name, value); + } + xhr.onreadystatechange = function() { + var _name, _ref1; + if (4 === xhr.readyState) { + if ((_ref1 = options.statusCode) != null) { + if (typeof _ref1[_name = xhr.status] === "function") { + _ref1[_name](); + } + } + if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { + return resolve(xhr); + } else { + return reject(xhr); + } + } + }; + return xhr.send(options.data); + }); + }; + resolvedPromise = function(val) { + return newPromise(function(resolve, reject) { + return resolve(val); + }); + }; + rejectedPromise = function(err) { + return newPromise(function(resolve, reject) { + return reject(err); + }); + }; + Octokit = (function() { + function Octokit(clientOptions) { + var AuthenticatedUser, Branch, ETagResponse, Gist, GitRepo, Organization, Repository, Team, User, clearCache, getCache, notifyEnd, notifyStart, setCache, toQueryString, _cachedETags, _client, _listeners, _request; + if (clientOptions == null) { + clientOptions = {}; + } + _.defaults(clientOptions, { + rootURL: 'https://api.github.com', + useETags: true, + usePostInsteadOfPatch: false + }); + _client = this; + _listeners = []; + ETagResponse = (function() { + function ETagResponse(eTag, data, status) { + this.eTag = eTag; + this.data = data; + this.status = status; + } + + return ETagResponse; + + })(); + _cachedETags = {}; + notifyStart = function(promise, path) { + return typeof promise.notify === "function" ? promise.notify({ + type: 'start', + path: path + }) : void 0; + }; + notifyEnd = function(promise, path) { + return typeof promise.notify === "function" ? promise.notify({ + type: 'end', + path: path + }) : void 0; + }; + _request = function(method, path, data, options) { + var auth, headers, mimeType, promise; + if (options == null) { + options = { + raw: false, + isBase64: false, + isBoolean: false + }; + } + if ('PATCH' === method && clientOptions.usePostInsteadOfPatch) { + method = 'POST'; + } + if (!/^http/.test(path)) { + path = "" + clientOptions.rootURL + path; + } + mimeType = void 0; + if (options.isBase64) { + mimeType = 'text/plain; charset=x-user-defined'; + } + headers = { + 'Accept': 'application/vnd.github.raw' + }; + if (userAgent) { + headers['User-Agent'] = userAgent; + } + if (path in _cachedETags) { + headers['If-None-Match'] = _cachedETags[path].eTag; + } else { + headers['If-Modified-Since'] = 'Thu, 01 Jan 1970 00:00:00 GMT'; + } + if (clientOptions.token || (clientOptions.username && clientOptions.password)) { + if (clientOptions.token) { + auth = "token " + clientOptions.token; + } else { + auth = 'Basic ' + base64encode("" + clientOptions.username + ":" + clientOptions.password); + } + headers['Authorization'] = auth; + } + promise = newPromise(function(resolve, reject) { + var ajaxConfig, always, onError, xhrPromise, + _this = this; + ajaxConfig = { + url: path, + type: method, + contentType: 'application/json', + mimeType: mimeType, + headers: headers, + processData: false, + data: !options.raw && data && JSON.stringify(data) || data, + dataType: !options.raw ? 'json' : void 0 + }; + if (options.isBoolean) { + ajaxConfig.statusCode = { + 204: function() { + return resolve(true); + }, + 404: function() { + return resolve(false); + } + }; + } + xhrPromise = ajax(ajaxConfig); + always = function(jqXHR) { + var listener, rateLimit, rateLimitRemaining, _i, _len, _results; + notifyEnd(_this, path); + rateLimit = parseFloat(jqXHR.getResponseHeader('X-RateLimit-Limit')); + rateLimitRemaining = parseFloat(jqXHR.getResponseHeader('X-RateLimit-Remaining')); + _results = []; + for (_i = 0, _len = _listeners.length; _i < _len; _i++) { + listener = _listeners[_i]; + _results.push(listener(rateLimitRemaining, rateLimit, method, path, data, options)); + } + return _results; + }; + xhrPromise.then(function(jqXHR) { + var converted, eTag, eTagResponse, i, links, valOptions, _i, _ref; + always(jqXHR); + if (304 === jqXHR.status) { + if (clientOptions.useETags && _cachedETags[path]) { + eTagResponse = _cachedETags[path]; + return resolve(eTagResponse.data, eTagResponse.status, jqXHR); + } else { + return resolve(jqXHR.responseText, status, jqXHR); + } + } else if (204 === jqXHR.status && options.isBoolean) { + return resolve(true, status, jqXHR); + } else { + if (jqXHR.responseText && 'json' === ajaxConfig.dataType) { + data = JSON.parse(jqXHR.responseText); + valOptions = {}; + links = jqXHR.getResponseHeader('Link'); + _.each(links != null ? links.split(',') : void 0, function(part) { + var discard, href, rel, _ref; + _ref = part.match(/<([^>]+)>;\ rel="([^"]+)"/), discard = _ref[0], href = _ref[1], rel = _ref[2]; + return valOptions["" + rel + "Page"] = function() { + return _request('GET', href, null, options); + }; + }); + _.extend(data, valOptions); + } else { + data = jqXHR.responseText; + } + if ('GET' === method && options.isBase64) { + converted = ''; + for (i = _i = 0, _ref = data.length; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) { + converted += String.fromCharCode(data.charCodeAt(i) & 0xff); + } + data = converted; + } + if ('GET' === method && jqXHR.getResponseHeader('ETag') && clientOptions.useETags) { + eTag = jqXHR.getResponseHeader('ETag'); + _cachedETags[path] = new ETagResponse(eTag, data, jqXHR.status); + } + return resolve(data, jqXHR.status, jqXHR); + } + }); + onError = function(jqXHR) { + var err, json; + always(jqXHR); + if (options.isBoolean && 404 === jqXHR.status) { + return resolve(false); + } else { + if (jqXHR.getResponseHeader('Content-Type') !== 'application/json; charset=utf-8') { + err = new Error(jqXHR.responseText); + err['status'] = jqXHR.status; + err['__jqXHR'] = jqXHR; + return reject(err); + } else { + err = new Error("Github error: " + jqXHR.responseText); + if (jqXHR.responseText) { + json = JSON.parse(jqXHR.responseText); + } else { + json = ''; + } + err['error'] = json; + err['status'] = jqXHR.status; + err['__jqXHR'] = jqXHR; + return reject(err); + } + } + }; + return (typeof xhrPromise["catch"] === "function" ? xhrPromise["catch"](onError) : void 0) || xhrPromise.fail(onError); + }); + notifyStart(promise, path); + return promise; + }; + toQueryString = function(options) { + var params; + if (_.isEmpty(options)) { + return ''; + } + params = []; + _.each(_.pairs(options), function(_arg) { + var key, value; + key = _arg[0], value = _arg[1]; + return params.push("" + key + "=" + (encodeURIComponent(value))); + }); + return "?" + (params.join('&')); + }; + this.clearCache = clearCache = function() { + return _cachedETags = {}; + }; + this.getCache = getCache = function() { + return _cachedETags; + }; + this.setCache = setCache = function(cachedETags) { + if (!(cachedETags !== null && typeof cachedETags === 'object')) { + throw new Error('BUG: argument of method "setCache" should be an object'); + } else { + return _cachedETags = cachedETags; + } + }; + this.onRateLimitChanged = function(listener) { + return _listeners.push(listener); + }; + this.getZen = function() { + return _request('GET', '/zen', null, { + raw: true + }); + }; + this.getAllUsers = function(since) { + var options; + if (since == null) { + since = null; + } + options = {}; + if (since) { + options.since = since; + } + return _request('GET', '/users', options); + }; + this.getOrgRepos = function(orgName, type) { + if (type == null) { + type = 'all'; + } + return _request('GET', "/orgs/" + orgName + "/repos?type=" + type + "&per_page=1000&sort=updated&direction=desc", null); + }; + this.getPublicGists = function(since) { + var getDate, options; + if (since == null) { + since = null; + } + options = null; + getDate = function(time) { + if (Date === time.constructor) { + return time.toISOString(); + } + return time; + }; + if (since) { + options = { + since: getDate(since) + }; + } + return _request('GET', '/gists/public', options); + }; + this.getPublicEvents = function() { + return _request('GET', '/events', null); + }; + this.getNotifications = function(options) { + var getDate, queryString; + if (options == null) { + options = {}; + } + getDate = function(time) { + if (Date === time.constructor) { + return time.toISOString(); + } + return time; + }; + if (options.since) { + options.since = getDate(options.since); + } + queryString = toQueryString(options); + return _request('GET', "/notifications" + queryString, null); + }; + User = (function() { + function User(_username) { + var _cachedInfo, _rootPath; + if (_username == null) { + _username = null; + } + if (_username) { + _rootPath = "/users/" + _username; + } else { + _rootPath = "/user"; + } + _cachedInfo = null; + this.getInfo = function(force) { + if (force == null) { + force = false; + } + if (force) { + _cachedInfo = null; + } + if (_cachedInfo) { + return resolvedPromise(_cachedInfo); + } + return _request('GET', "" + _rootPath, null).then(function(info) { + return _cachedInfo = info; + }); + }; + this.getRepos = function(type, sort, direction) { + if (type == null) { + type = 'all'; + } + if (sort == null) { + sort = 'pushed'; + } + if (direction == null) { + direction = 'desc'; + } + return _request('GET', "" + _rootPath + "/repos?type=" + type + "&per_page=1000&sort=" + sort + "&direction=" + direction, null); + }; + this.getOrgs = function() { + return _request('GET', "" + _rootPath + "/orgs", null); + }; + this.getGists = function() { + return _request('GET', "" + _rootPath + "/gists", null); + }; + this.getFollowers = function() { + return _request('GET', "" + _rootPath + "/followers", null); + }; + this.getFollowing = function() { + return _request('GET', "" + _rootPath + "/following", null); + }; + this.isFollowing = function(user) { + return _request('GET', "" + _rootPath + "/following/" + user, null, { + isBoolean: true + }); + }; + this.getPublicKeys = function() { + return _request('GET', "" + _rootPath + "/keys", null); + }; + this.getReceivedEvents = function(onlyPublic) { + var isPublic; + if (!_username) { + throw new Error('BUG: This does not work for authenticated users yet!'); + } + isPublic = ''; + if (onlyPublic) { + isPublic = '/public'; + } + return _request('GET', "/users/" + _username + "/received_events" + isPublic, null); + }; + this.getEvents = function(onlyPublic) { + var isPublic; + if (!_username) { + throw new Error('BUG: This does not work for authenticated users yet!'); + } + isPublic = ''; + if (onlyPublic) { + isPublic = '/public'; + } + return _request('GET', "/users/" + _username + "/events" + isPublic, null); + }; + } + + return User; + + })(); + AuthenticatedUser = (function(_super) { + __extends(AuthenticatedUser, _super); + + function AuthenticatedUser() { + AuthenticatedUser.__super__.constructor.call(this); + this.updateInfo = function(options) { + return _request('PATCH', '/user', options); + }; + this.getGists = function() { + return _request('GET', '/gists', null); + }; + this.follow = function(username) { + return _request('PUT', "/user/following/" + username, null); + }; + this.unfollow = function(username) { + return _request('DELETE', "/user/following/" + username, null); + }; + this.getEmails = function() { + return _request('GET', '/user/emails', null); + }; + this.addEmail = function(emails) { + if (!_.isArray(emails)) { + emails = [emails]; + } + return _request('POST', '/user/emails', emails); + }; + this.addEmail = function(emails) { + if (!_.isArray(emails)) { + emails = [emails]; + } + return _request('DELETE', '/user/emails', emails); + }; + this.getPublicKey = function(id) { + return _request('GET', "/user/keys/" + id, null); + }; + this.addPublicKey = function(title, key) { + return _request('POST', "/user/keys", { + title: title, + key: key + }); + }; + this.updatePublicKey = function(id, options) { + return _request('PATCH', "/user/keys/" + id, options); + }; + this.createRepo = function(name, options) { + if (options == null) { + options = {}; + } + options.name = name; + return _request('POST', "/user/repos", options); + }; + this.getReceivedEvents = function(username, page) { + var currentPage; + if (page == null) { + page = 1; + } + currentPage = '?page=' + page; + return _request('GET', '/users/' + username + '/received_events' + currentPage, null); + }; + } + + return AuthenticatedUser; + + })(User); + Team = (function() { + function Team(id) { + this.id = id; + this.getInfo = function() { + return _request('GET', "/teams/" + this.id, null); + }; + this.updateTeam = function(options) { + return _request('PATCH', "/teams/" + this.id, options); + }; + this.remove = function() { + return _request('DELETE', "/teams/" + this.id); + }; + this.getMembers = function() { + return _request('GET', "/teams/" + this.id + "/members"); + }; + this.isMember = function(user) { + return _request('GET', "/teams/" + this.id + "/members/" + user, null, { + isBoolean: true + }); + }; + this.addMember = function(user) { + return _request('PUT', "/teams/" + this.id + "/members/" + user); + }; + this.removeMember = function(user) { + return _request('DELETE', "/teams/" + this.id + "/members/" + user); + }; + this.getRepos = function() { + return _request('GET', "/teams/" + this.id + "/repos"); + }; + this.addRepo = function(orgName, repoName) { + return _request('PUT', "/teams/" + this.id + "/repos/" + orgName + "/" + repoName); + }; + this.removeRepo = function(orgName, repoName) { + return _request('DELETE', "/teams/" + this.id + "/repos/" + orgName + "/" + repoName); + }; + } + + return Team; + + })(); + Organization = (function() { + function Organization(name) { + this.name = name; + this.getInfo = function() { + return _request('GET', "/orgs/" + this.name, null); + }; + this.updateInfo = function(options) { + return _request('PATCH', "/orgs/" + this.name, options); + }; + this.getTeams = function() { + return _request('GET', "/orgs/" + this.name + "/teams", null); + }; + this.createTeam = function(name, repoNames, permission) { + var options; + if (repoNames == null) { + repoNames = null; + } + if (permission == null) { + permission = 'pull'; + } + options = { + name: name, + permission: permission + }; + if (repoNames) { + options.repo_names = repoNames; + } + return _request('POST', "/orgs/" + this.name + "/teams", options); + }; + this.getMembers = function() { + return _request('GET', "/orgs/" + this.name + "/members", null); + }; + this.isMember = function(user) { + return _request('GET', "/orgs/" + this.name + "/members/" + user, null, { + isBoolean: true + }); + }; + this.removeMember = function(user) { + return _request('DELETE', "/orgs/" + this.name + "/members/" + user, null); + }; + this.createRepo = function(name, options) { + if (options == null) { + options = {}; + } + options.name = name; + return _request('POST', "/orgs/" + this.name + "/repos", options); + }; + this.getRepos = function() { + return _request('GET', "/orgs/" + this.name + "/repos?type=all", null); + }; + } + + return Organization; + + })(); + GitRepo = (function() { + function GitRepo(repoUser, repoName) { + var _repoPath; + this.repoUser = repoUser; + this.repoName = repoName; + _repoPath = "/repos/" + this.repoUser + "/" + this.repoName; + this.deleteRepo = function() { + return _request('DELETE', "" + _repoPath); + }; + this._updateTree = function(branch) { + return this.getRef("heads/" + branch); + }; + this.getRef = function(ref) { + var _this = this; + return _request('GET', "" + _repoPath + "/git/refs/" + ref, null).then(function(res) { + return res.object.sha; + }); + }; + this.createRef = function(options) { + return _request('POST', "" + _repoPath + "/git/refs", options); + }; + this.deleteRef = function(ref) { + return _request('DELETE', "" + _repoPath + "/git/refs/" + ref, this.options); + }; + this.getBranches = function() { + var _this = this; + return _request('GET', "" + _repoPath + "/git/refs/heads", null).then(function(heads) { + return _.map(heads, function(head) { + return _.last(head.ref.split("/")); + }); + }); + }; + this.getBlob = function(sha, isBase64) { + return _request('GET', "" + _repoPath + "/git/blobs/" + sha, null, { + raw: true, + isBase64: isBase64 + }); + }; + this.getSha = function(branch, path) { + var _this = this; + if (path === '') { + return this.getRef("heads/" + branch); + } + return this.getTree(branch, { + recursive: true + }).then(function(tree) { + var file; + file = _.select(tree, function(file) { + return file.path === path; + })[0]; + if (file != null ? file.sha : void 0) { + return file != null ? file.sha : void 0; + } + return rejectedPromise({ + message: 'SHA_NOT_FOUND' + }); + }); + }; + this.getContents = function(path, sha) { + var queryString, + _this = this; + if (sha == null) { + sha = null; + } + queryString = ''; + if (sha !== null) { + queryString = toQueryString({ + ref: sha + }); + } + return _request('GET', "" + _repoPath + "/contents/" + path + queryString, null, { + raw: true + }).then(function(contents) { + return contents; + }); + }; + this.removeFile = function(path, message, sha, branch) { + var params; + params = { + message: message, + sha: sha, + branch: branch + }; + return _request('DELETE', "" + _repoPath + "/contents/" + path, params, null); + }; + this.getTree = function(tree, options) { + var queryString, + _this = this; + if (options == null) { + options = null; + } + queryString = toQueryString(options); + return _request('GET', "" + _repoPath + "/git/trees/" + tree + queryString, null).then(function(res) { + return res.tree; + }); + }; + this.postBlob = function(content, isBase64) { + var _this = this; + if (typeof content === 'string') { + if (isBase64) { + content = base64encode(content); + } + content = { + content: content, + encoding: 'utf-8' + }; + } + if (isBase64) { + content.encoding = 'base64'; + } + return _request('POST', "" + _repoPath + "/git/blobs", content).then(function(res) { + return res.sha; + }); + }; + this.updateTreeMany = function(baseTree, newTree) { + var data, + _this = this; + data = { + base_tree: baseTree, + tree: newTree + }; + return _request('POST', "" + _repoPath + "/git/trees", data).then(function(res) { + return res.sha; + }); + }; + this.postTree = function(tree) { + var _this = this; + return _request('POST', "" + _repoPath + "/git/trees", { + tree: tree + }).then(function(res) { + return res.sha; + }); + }; + this.commit = function(parents, tree, message) { + var data; + if (!_.isArray(parents)) { + parents = [parents]; + } + data = { + message: message, + parents: parents, + tree: tree + }; + return _request('POST', "" + _repoPath + "/git/commits", data).then(function(commit) { + return commit.sha; + }); + }; + this.updateHead = function(head, commit, force) { + var options; + if (force == null) { + force = false; + } + options = { + sha: commit + }; + if (force) { + options.force = true; + } + return _request('PATCH', "" + _repoPath + "/git/refs/heads/" + head, options); + }; + this.getCommit = function(sha) { + return _request('GET', "" + _repoPath + "/commits/" + sha, null); + }; + this.getCommits = function(options) { + var getDate, queryString; + if (options == null) { + options = {}; + } + options = _.extend({}, options); + getDate = function(time) { + if (Date === time.constructor) { + return time.toISOString(); + } + return time; + }; + if (options.since) { + options.since = getDate(options.since); + } + if (options.until) { + options.until = getDate(options.until); + } + queryString = toQueryString(options); + return _request('GET', "" + _repoPath + "/commits" + queryString, null); + }; + } + + return GitRepo; + + })(); + Branch = (function() { + function Branch(git, getRef) { + var _getRef, _git; + _git = git; + _getRef = getRef || function() { + throw new Error('BUG: No way to fetch branch ref!'); + }; + this.getCommit = function(sha) { + return _git.getCommit(sha); + }; + this.getCommits = function(options) { + if (options == null) { + options = {}; + } + options = _.extend({}, options); + return _getRef().then(function(branch) { + options.sha = branch; + return _git.getCommits(options); + }); + }; + this.createBranch = function(newBranchName) { + var _this = this; + return _getRef().then(function(branch) { + return _git.getSha(branch, '').then(function(sha) { + return _git.createRef({ + sha: sha, + ref: "refs/heads/" + newBranchName + }); + }); + }); + }; + this.read = function(path, isBase64) { + var _this = this; + return _getRef().then(function(branch) { + return _git.getSha(branch, path).then(function(sha) { + return _git.getBlob(sha, isBase64).then(function(bytes) { + return { + sha: sha, + content: bytes + }; + }); + }); + }); + }; + this.contents = function(path) { + var _this = this; + return _getRef().then(function(branch) { + return _git.getSha(branch, '').then(function(sha) { + return _git.getContents(path, sha).then(function(contents) { + return contents; + }); + }); + }); + }; + this.remove = function(path, message, sha) { + var _this = this; + if (message == null) { + message = "Removed " + path; + } + if (sha == null) { + sha = null; + } + return _getRef().then(function(branch) { + if (sha) { + return _git.removeFile(path, message, sha, branch); + } else { + return _git.getSha(branch, path).then(function(sha) { + return _git.removeFile(path, message, sha, branch); + }); + } + }); + }; + this.move = function(path, newPath, message) { + var _this = this; + if (message == null) { + message = "Moved " + path; + } + return _getRef().then(function(branch) { + return _git._updateTree(branch).then(function(latestCommit) { + return _git.getTree(latestCommit, { + recursive: true + }).then(function(tree) { + _.each(tree, function(ref) { + if (ref.path === path) { + ref.path = newPath; + } + if (ref.type === 'tree') { + return delete ref.sha; + } + }); + return _git.postTree(tree).then(function(rootTree) { + return _git.commit(latestCommit, rootTree, message).then(function(commit) { + return _git.updateHead(branch, commit).then(function(res) { + return res; + }); + }); + }); + }); + }); + }); + }; + this.write = function(path, content, message, isBase64, parentCommitSha) { + var contents; + if (message == null) { + message = "Changed " + path; + } + if (parentCommitSha == null) { + parentCommitSha = null; + } + contents = {}; + contents[path] = { + content: content, + isBase64: isBase64 + }; + return this.writeMany(contents, message, parentCommitSha); + }; + this.writeMany = function(contents, message, parentCommitShas) { + var _this = this; + if (message == null) { + message = "Changed Multiple"; + } + if (parentCommitShas == null) { + parentCommitShas = null; + } + return _getRef().then(function(branch) { + var afterParentCommitShas; + afterParentCommitShas = function(parentCommitShas) { + var promises; + promises = _.map(_.pairs(contents), function(_arg) { + var content, data, isBase64, path, + _this = this; + path = _arg[0], data = _arg[1]; + content = data.content || data; + isBase64 = data.isBase64 || false; + return _git.postBlob(content, isBase64).then(function(blob) { + return { + path: path, + mode: '100644', + type: 'blob', + sha: blob + }; + }); + }); + return allPromises(promises).then(function(newTrees) { + return _git.updateTreeMany(parentCommitShas, newTrees).then(function(tree) { + return _git.commit(parentCommitShas, tree, message).then(function(commitSha) { + return _git.updateHead(branch, commitSha).then(function(res) { + return res.object; + }); + }); + }); + }); + }; + if (parentCommitShas) { + return afterParentCommitShas(parentCommitShas); + } else { + return _git._updateTree(branch).then(afterParentCommitShas); + } + }); + }; + } + + return Branch; + + })(); + Repository = (function() { + function Repository(options) { + var _repo, _user; + this.options = options; + _user = this.options.user; + _repo = this.options.name; + this.git = new GitRepo(_user, _repo); + this.repoPath = "/repos/" + _user + "/" + _repo; + this.currentTree = { + branch: null, + sha: null + }; + this.updateInfo = function(options) { + return _request('PATCH', this.repoPath, options); + }; + this.getBranches = function() { + return this.git.getBranches(); + }; + this.getBranch = function(branchName) { + var getRef, + _this = this; + if (branchName == null) { + branchName = null; + } + if (branchName) { + getRef = function() { + return resolvedPromise(branchName); + }; + return new Branch(this.git, getRef); + } else { + return this.getDefaultBranch(); + } + }; + this.getDefaultBranch = function() { + var getRef, + _this = this; + getRef = function() { + return _this.getInfo().then(function(info) { + return info.default_branch; + }); + }; + return new Branch(this.git, getRef); + }; + this.setDefaultBranch = function(branchName) { + return this.updateInfo({ + name: _repo, + default_branch: branchName + }); + }; + this.getInfo = function() { + return _request('GET', this.repoPath, null); + }; + this.getContents = function(branch, path) { + return _request('GET', "" + this.repoPath + "/contents?ref=" + branch, { + path: path + }); + }; + this.fork = function(organization) { + if (organization) { + return _request('POST', "" + this.repoPath + "/forks", { + organization: organization + }); + } else { + return _request('POST', "" + this.repoPath + "/forks", null); + } + }; + this.createPullRequest = function(options) { + return _request('POST', "" + this.repoPath + "/pulls", options); + }; + this.getCommits = function(options) { + return this.git.getCommits(options); + }; + this.getEvents = function() { + return _request('GET', "" + this.repoPath + "/events", null); + }; + this.getIssueEvents = function() { + return _request('GET', "" + this.repoPath + "/issues/events", null); + }; + this.getNetworkEvents = function() { + return _request('GET', "/networks/" + _user + "/" + _repo + "/events", null); + }; + this.getNotifications = function(options) { + var getDate, queryString; + if (options == null) { + options = {}; + } + getDate = function(time) { + if (Date === time.constructor) { + return time.toISOString(); + } + return time; + }; + if (options.since) { + options.since = getDate(options.since); + } + queryString = toQueryString(options); + return _request('GET', "" + this.repoPath + "/notifications" + queryString, null); + }; + this.getCollaborators = function() { + return _request('GET', "" + this.repoPath + "/collaborators", null); + }; + this.addCollaborator = function(username) { + if (!username) { + throw new Error('BUG: username is required'); + } + return _request('PUT', "" + this.repoPath + "/collaborators/" + username, null, { + isBoolean: true + }); + }; + this.removeCollaborator = function(username) { + if (!username) { + throw new Error('BUG: username is required'); + } + return _request('DELETE', "" + this.repoPath + "/collaborators/" + username, null, { + isBoolean: true + }); + }; + this.isCollaborator = function(username) { + if (username == null) { + username = null; + } + if (!username) { + throw new Error('BUG: username is required'); + } + return _request('GET', "" + this.repoPath + "/collaborators/" + username, null, { + isBoolean: true + }); + }; + this.canCollaborate = function() { + var _this = this; + if (!(clientOptions.password || clientOptions.token)) { + return resolvedPromise(false); + } + return _client.getLogin().then(function(login) { + if (!login) { + return false; + } else { + return _this.isCollaborator(login); + } + }).then(null, function(err) { + return false; + }); + }; + this.getHooks = function() { + return _request('GET', "" + this.repoPath + "/hooks", null); + }; + this.getHook = function(id) { + return _request('GET', "" + this.repoPath + "/hooks/" + id, null); + }; + this.createHook = function(name, config, events, active) { + var data; + if (events == null) { + events = ['push']; + } + if (active == null) { + active = true; + } + data = { + name: name, + config: config, + events: events, + active: active + }; + return _request('POST', "" + this.repoPath + "/hooks", data); + }; + this.editHook = function(id, config, events, addEvents, removeEvents, active) { + var data; + if (config == null) { + config = null; + } + if (events == null) { + events = null; + } + if (addEvents == null) { + addEvents = null; + } + if (removeEvents == null) { + removeEvents = null; + } + if (active == null) { + active = null; + } + data = {}; + if (config !== null) { + data.config = config; + } + if (events !== null) { + data.events = events; + } + if (addEvents !== null) { + data.add_events = addEvents; + } + if (removeEvents !== null) { + data.remove_events = removeEvents; + } + if (active !== null) { + data.active = active; + } + return _request('PATCH', "" + this.repoPath + "/hooks/" + id, data); + }; + this.testHook = function(id) { + return _request('POST', "" + this.repoPath + "/hooks/" + id + "/tests", null); + }; + this.deleteHook = function(id) { + return _request('DELETE', "" + this.repoPath + "/hooks/" + id, null); + }; + this.getLanguages = function() { + return _request('GET', "" + this.repoPath + "/languages", null); + }; + this.getReleases = function() { + return _request('GET', "" + this.repoPath + "/releases", null); + }; + } + + return Repository; + + })(); + Gist = (function() { + function Gist(options) { + var id, _gistPath; + this.options = options; + id = this.options.id; + _gistPath = "/gists/" + id; + this.read = function() { + return _request('GET', _gistPath, null); + }; + this.create = function(files, isPublic, description) { + if (isPublic == null) { + isPublic = false; + } + if (description == null) { + description = null; + } + options = { + isPublic: isPublic, + files: files + }; + if (description != null) { + options.description = description; + } + return _request('POST', "/gists", options); + }; + this["delete"] = function() { + return _request('DELETE', _gistPath, null); + }; + this.fork = function() { + return _request('POST', "" + _gistPath + "/forks", null); + }; + this.update = function(files, description) { + if (description == null) { + description = null; + } + options = { + files: files + }; + if (description != null) { + options.description = description; + } + return _request('PATCH', _gistPath, options); + }; + this.star = function() { + return _request('PUT', "" + _gistPath + "/star"); + }; + this.unstar = function() { + return _request('DELETE', "" + _gistPath + "/star"); + }; + this.isStarred = function() { + return _request('GET', "" + _gistPath, null, { + isBoolean: true + }); + }; + } + + return Gist; + + })(); + this.getRepo = function(user, repo) { + if (!user) { + throw new Error('BUG! user argument is required'); + } + if (!repo) { + throw new Error('BUG! repo argument is required'); + } + return new Repository({ + user: user, + name: repo + }); + }; + this.getOrg = function(name) { + return new Organization(name); + }; + this.getUser = function(login) { + if (login == null) { + login = null; + } + if (login) { + return new User(login); + } else if (clientOptions.password || clientOptions.token) { + return new AuthenticatedUser(); + } else { + return null; + } + }; + this.getGist = function(id) { + return new Gist({ + id: id + }); + }; + this.getLogin = function() { + if (clientOptions.password || clientOptions.token) { + return new User().getInfo().then(function(info) { + return info.login; + }); + } else { + return resolvedPromise(null); + } + }; + } + + return Octokit; + + })(); + return Octokit; + }; + + if (typeof exports !== "undefined" && exports !== null) { + Promise = this.Promise || require('es6-promise').Promise; + XMLHttpRequest = this.XMLHttpRequest || require('xmlhttprequest').XMLHttpRequest; + newPromise = function(fn) { + return new Promise(fn); + }; + allPromises = function(promises) { + return Promise.all(promises); + }; + encode = this.btoa || function(str) { + var buffer; + buffer = new Buffer(str, 'binary'); + return buffer.toString('base64'); + }; + Octokit = makeOctokit(newPromise, allPromises, XMLHttpRequest, encode, 'octokit'); + exports["new"] = function(options) { + return new Octokit(options); + }; + } else { + createGlobalAndAMD = function(newPromise, allPromises) { + if (_this.define != null) { + return _this.define('octokit', [], function() { + return makeOctokit(newPromise, allPromises, _this.XMLHttpRequest, _this.btoa); + }); + } else { + Octokit = makeOctokit(newPromise, allPromises, _this.XMLHttpRequest, _this.btoa); + _this.Octokit = Octokit; + return _this.Github = Octokit; + } + }; + if (this.Q) { + newPromise = function(fn) { + var deferred, reject, resolve; + deferred = _this.Q.defer(); + resolve = function(val) { + return deferred.resolve(val); + }; + reject = function(err) { + return deferred.reject(err); + }; + fn(resolve, reject); + return deferred.promise; + }; + allPromises = function(promises) { + return this.Q.all(promises); + }; + createGlobalAndAMD(newPromise, allPromises); + } else if (this.angular) { + injector = angular.injector(['ng']); + injector.invoke(function($q) { + newPromise = function(fn) { + var deferred, reject, resolve; + deferred = $q.defer(); + resolve = function(val) { + return deferred.resolve(val); + }; + reject = function(err) { + return deferred.reject(err); + }; + fn(resolve, reject); + return deferred.promise; + }; + allPromises = function(promises) { + return $q.all(promises); + }; + return createGlobalAndAMD(newPromise, allPromises); + }); + } else if ((_ref = this.jQuery) != null ? _ref.Deferred : void 0) { + newPromise = function(fn) { + var promise, reject, resolve; + promise = _this.jQuery.Deferred(); + resolve = function(val) { + return promise.resolve(val); + }; + reject = function(val) { + return promise.reject(val); + }; + fn(resolve, reject); + return promise.promise(); + }; + allPromises = function(promises) { + var _ref1; + return (_ref1 = _this.jQuery).when.apply(_ref1, promises).then(function() { + var promises; + promises = 1 <= arguments.length ? __slice.call(arguments, 0) : []; + return promises; + }); + }; + createGlobalAndAMD(newPromise, allPromises); + } else if (this.Promise) { + newPromise = function(fn) { + return new _this.Promise(function(resolve, reject) { + if (resolve.fulfill) { + return fn(resolve.resolve.bind(resolve), resolve.reject.bind(resolve)); + } else { + return fn.apply(null, arguments); + } + }); + }; + allPromises = this.Promise.all; + createGlobalAndAMD(newPromise, allPromises); + } else { + err = function(msg) { + if (typeof console !== "undefined" && console !== null) { + if (typeof console.error === "function") { + console.error(msg); + } + } + throw new Error(msg); + }; + err('A Promise API was not found. Supported libraries that have Promises are jQuery, angularjs, and https://github.com/jakearchibald/es6-promise'); + } + } + +}).call(this); |
