Movatterモバイル変換


[0]ホーム

URL:


Repository.js

/** * @file * @copyright  2013 Michael Aufreiter (Development Seed) and 2016 Yahoo Inc. * @license    Licensed under {@link https://spdx.org/licenses/BSD-3-Clause-Clear.html BSD-3-Clause-Clear}. *             Github.js is freely distributable. */import Requestable from './Requestable';import Utf8 from 'utf8';import {   Base64,} from 'js-base64';import debug from 'debug';const log = debug('github:repository');/** * Respository encapsulates the functionality to create, query, and modify files. */class Repository extends Requestable {   /**    * Create a Repository.    * @param {string} fullname - the full name of the repository    * @param {Requestable.auth} [auth] - information required to authenticate to Github    * @param {string} [apiBase=https://api.github.com] - the base Github API URL    */   constructor(fullname, auth, apiBase) {      super(auth, apiBase);      this.__fullname = fullname;      this.__currentTree = {         branch: null,         sha: null,      };   }   /**    * Get a reference    * @see https://developer.github.com/v3/git/refs/#get-a-reference    * @param {string} ref - the reference to get    * @param {Requestable.callback} [cb] - will receive the reference's refSpec or a list of refSpecs that match `ref`    * @return {Promise} - the promise for the http request    */   getRef(ref, cb) {      return this._request('GET', `/repos/${this.__fullname}/git/refs/${ref}`, null, cb);   }   /**    * Create a reference    * @see https://developer.github.com/v3/git/refs/#create-a-reference    * @param {Object} options - the object describing the ref    * @param {Requestable.callback} [cb] - will receive the ref    * @return {Promise} - the promise for the http request    */   createRef(options, cb) {      return this._request('POST', `/repos/${this.__fullname}/git/refs`, options, cb);   }   /**    * Delete a reference    * @see https://developer.github.com/v3/git/refs/#delete-a-reference    * @param {string} ref - the name of the ref to delte    * @param {Requestable.callback} [cb] - will receive true if the request is successful    * @return {Promise} - the promise for the http request    */   deleteRef(ref, cb) {      return this._request('DELETE', `/repos/${this.__fullname}/git/refs/${ref}`, null, cb);   }   /**    * Delete a repository    * @see https://developer.github.com/v3/repos/#delete-a-repository    * @param {Requestable.callback} [cb] - will receive true if the request is successful    * @return {Promise} - the promise for the http request    */   deleteRepo(cb) {      return this._request('DELETE', `/repos/${this.__fullname}`, null, cb);   }   /**    * List the tags on a repository    * @see https://developer.github.com/v3/repos/#list-tags    * @param {Requestable.callback} [cb] - will receive the tag data    * @return {Promise} - the promise for the http request    */   listTags(cb) {      return this._request('GET', `/repos/${this.__fullname}/tags`, null, cb);   }   /**    * List the open pull requests on the repository    * @see https://developer.github.com/v3/pulls/#list-pull-requests    * @param {Object} options - options to filter the search    * @param {Requestable.callback} [cb] - will receive the list of PRs    * @return {Promise} - the promise for the http request    */   listPullRequests(options, cb) {      options = options || {};      return this._request('GET', `/repos/${this.__fullname}/pulls`, options, cb);   }   /**    * Get information about a specific pull request    * @see https://developer.github.com/v3/pulls/#get-a-single-pull-request    * @param {number} number - the PR you wish to fetch    * @param {Requestable.callback} [cb] - will receive the PR from the API    * @return {Promise} - the promise for the http request    */   getPullRequest(number, cb) {      return this._request('GET', `/repos/${this.__fullname}/pulls/${number}`, null, cb);   }   /**    * List the files of a specific pull request    * @see https://developer.github.com/v3/pulls/#list-pull-requests-files    * @param {number|string} number - the PR you wish to fetch    * @param {Requestable.callback} [cb] - will receive the list of files from the API    * @return {Promise} - the promise for the http request    */   listPullRequestFiles(number, cb) {      return this._request('GET', `/repos/${this.__fullname}/pulls/${number}/files`, null, cb);   }   /**    * Compare two branches/commits/repositories    * @see https://developer.github.com/v3/repos/commits/#compare-two-commits    * @param {string} base - the base commit    * @param {string} head - the head commit    * @param {Requestable.callback} cb - will receive the comparison    * @return {Promise} - the promise for the http request    */   compareBranches(base, head, cb) {      return this._request('GET', `/repos/${this.__fullname}/compare/${base}...${head}`, null, cb);   }   /**    * List all the branches for the repository    * @see https://developer.github.com/v3/repos/#list-branches    * @param {Requestable.callback} cb - will receive the list of branches    * @return {Promise} - the promise for the http request    */   listBranches(cb) {      return this._request('GET', `/repos/${this.__fullname}/branches`, null, cb);   }   /**    * Get a raw blob from the repository    * @see https://developer.github.com/v3/git/blobs/#get-a-blob    * @param {string} sha - the sha of the blob to fetch    * @param {Requestable.callback} cb - will receive the blob from the API    * @return {Promise} - the promise for the http request    */   getBlob(sha, cb) {      return this._request('GET', `/repos/${this.__fullname}/git/blobs/${sha}`, null, cb, 'raw');   }   /**    * Get a single branch    * @see https://developer.github.com/v3/repos/branches/#get-branch    * @param {string} branch - the name of the branch to fetch    * @param {Requestable.callback} cb - will receive the branch from the API    * @returns {Promise} - the promise for the http request    */   getBranch(branch, cb) {      return this._request('GET', `/repos/${this.__fullname}/branches/${branch}`, null, cb);   }   /**    * Get a commit from the repository    * @see https://developer.github.com/v3/repos/commits/#get-a-single-commit    * @param {string} sha - the sha for the commit to fetch    * @param {Requestable.callback} cb - will receive the commit data    * @return {Promise} - the promise for the http request    */   getCommit(sha, cb) {      return this._request('GET', `/repos/${this.__fullname}/git/commits/${sha}`, null, cb);   }   /**    * List the commits on a repository, optionally filtering by path, author or time range    * @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository    * @param {Object} [options] - the filtering options for commits    * @param {string} [options.sha] - the SHA or branch to start from    * @param {string} [options.path] - the path to search on    * @param {string} [options.author] - the commit author    * @param {(Date|string)} [options.since] - only commits after this date will be returned    * @param {(Date|string)} [options.until] - only commits before this date will be returned    * @param {Requestable.callback} cb - will receive the list of commits found matching the criteria    * @return {Promise} - the promise for the http request    */   listCommits(options, cb) {      options = options || {};      options.since = this._dateToISO(options.since);      options.until = this._dateToISO(options.until);      return this._request('GET', `/repos/${this.__fullname}/commits`, options, cb);   }    /**     * Gets a single commit information for a repository     * @see https://developer.github.com/v3/repos/commits/#get-a-single-commit     * @param {string} ref - the reference for the commit-ish     * @param {Requestable.callback} cb - will receive the commit information     * @return {Promise} - the promise for the http request     */   getSingleCommit(ref, cb) {      ref = ref || '';      return this._request('GET', `/repos/${this.__fullname}/commits/${ref}`, null, cb);   }   /**    * Get tha sha for a particular object in the repository. This is a convenience function    * @see https://developer.github.com/v3/repos/contents/#get-contents    * @param {string} [branch] - the branch to look in, or the repository's default branch if omitted    * @param {string} path - the path of the file or directory    * @param {Requestable.callback} cb - will receive a description of the requested object, including a `SHA` property    * @return {Promise} - the promise for the http request    */   getSha(branch, path, cb) {      branch = branch ? `?ref=${branch}` : '';      return this._request('GET', `/repos/${this.__fullname}/contents/${path}${branch}`, null, cb);   }   /**    * List the commit statuses for a particular sha, branch, or tag    * @see https://developer.github.com/v3/repos/statuses/#list-statuses-for-a-specific-ref    * @param {string} sha - the sha, branch, or tag to get statuses for    * @param {Requestable.callback} cb - will receive the list of statuses    * @return {Promise} - the promise for the http request    */   listStatuses(sha, cb) {      return this._request('GET', `/repos/${this.__fullname}/commits/${sha}/statuses`, null, cb);   }   /**    * Get a description of a git tree    * @see https://developer.github.com/v3/git/trees/#get-a-tree    * @param {string} treeSHA - the SHA of the tree to fetch    * @param {Requestable.callback} cb - will receive the callback data    * @return {Promise} - the promise for the http request    */   getTree(treeSHA, cb) {      return this._request('GET', `/repos/${this.__fullname}/git/trees/${treeSHA}`, null, cb);   }   /**    * Create a blob    * @see https://developer.github.com/v3/git/blobs/#create-a-blob    * @param {(string|Buffer|Blob)} content - the content to add to the repository    * @param {Requestable.callback} cb - will receive the details of the created blob    * @return {Promise} - the promise for the http request    */   createBlob(content, cb) {      let postBody = this._getContentObject(content);      log('sending content', postBody);      return this._request('POST', `/repos/${this.__fullname}/git/blobs`, postBody, cb);   }   /**    * Get the object that represents the provided content    * @param {string|Buffer|Blob} content - the content to send to the server    * @return {Object} the representation of `content` for the GitHub API    */   _getContentObject(content) {      if (typeof content === 'string') {         log('contet is a string');         return {            content: Utf8.encode(content),            encoding: 'utf-8',         };      } else if (typeof Buffer !== 'undefined' && content instanceof Buffer) {         log('We appear to be in Node');         return {            content: content.toString('base64'),            encoding: 'base64',         };      } else if (typeof Blob !== 'undefined' && content instanceof Blob) {         log('We appear to be in the browser');         return {            content: Base64.encode(content),            encoding: 'base64',         };      } else { // eslint-disable-line         log(`Not sure what this content is: ${typeof content}, ${JSON.stringify(content)}`);         throw new Error('Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)');      }   }   /**    * Update a tree in Git    * @see https://developer.github.com/v3/git/trees/#create-a-tree    * @param {string} baseTreeSHA - the SHA of the tree to update    * @param {string} path - the path for the new file    * @param {string} blobSHA - the SHA for the blob to put at `path`    * @param {Requestable.callback} cb - will receive the new tree that is created    * @return {Promise} - the promise for the http request    * @deprecated use {@link Repository#createTree} instead    */   updateTree(baseTreeSHA, path, blobSHA, cb) {      let newTree = {         base_tree: baseTreeSHA, // eslint-disable-line         tree: [{            path: path,            sha: blobSHA,            mode: '100644',            type: 'blob',         }],      };      return this._request('POST', `/repos/${this.__fullname}/git/trees`, newTree, cb);   }   /**    * Create a new tree in git    * @see https://developer.github.com/v3/git/trees/#create-a-tree    * @param {Object} tree - the tree to create    * @param {string} baseSHA - the root sha of the tree    * @param {Requestable.callback} cb - will receive the new tree that is created    * @return {Promise} - the promise for the http request    */   createTree(tree, baseSHA, cb) {      return this._request('POST', `/repos/${this.__fullname}/git/trees`, {         tree,         base_tree: baseSHA, // eslint-disable-line camelcase      }, cb);   }   /**    * Add a commit to the repository    * @see https://developer.github.com/v3/git/commits/#create-a-commit    * @param {string} parent - the SHA of the parent commit    * @param {string} tree - the SHA of the tree for this commit    * @param {string} message - the commit message    * @param {Requestable.callback} cb - will receive the commit that is created    * @return {Promise} - the promise for the http request    */   commit(parent, tree, message, cb) {      let data = {         message,         tree,         parents: [parent],      };      return this._request('POST', `/repos/${this.__fullname}/git/commits`, data, cb)         .then((response) => {            this.__currentTree.sha = response.data.sha; // Update latest commit            return response;         });   }   /**    * Update a ref    * @see https://developer.github.com/v3/git/refs/#update-a-reference    * @param {string} ref - the ref to update    * @param {string} commitSHA - the SHA to point the reference to    * @param {boolean} force - indicates whether to force or ensure a fast-forward update    * @param {Requestable.callback} cb - will receive the updated ref back    * @return {Promise} - the promise for the http request    */   updateHead(ref, commitSHA, force, cb) {      return this._request('PATCH', `/repos/${this.__fullname}/git/refs/${ref}`, {         sha: commitSHA,         force: force,      }, cb);   }   /**    * Update commit status    * @see https://developer.github.com/v3/repos/statuses/    * @param {string} commitSHA - the SHA of the commit that should be updated    * @param {object} options - Commit status parameters    * @param {string} options.state - The state of the status. Can be one of: pending, success, error, or failure.    * @param {string} [options.target_url] - The target URL to associate with this status.    * @param {string} [options.description] - A short description of the status.    * @param {string} [options.context] - A string label to differentiate this status among CI systems.    * @param {Requestable.callback} cb - will receive the updated commit back    * @return {Promise} - the promise for the http request    */   updateStatus(commitSHA, options, cb) {      return this._request('POST', `/repos/${this.__fullname}/statuses/${commitSHA}`, options, cb);   }   /**    * Update repository information    * @see https://developer.github.com/v3/repos/#edit    * @param {object} options - New parameters that will be set to the repository    * @param {string} options.name - Name of the repository    * @param {string} [options.description] - A short description of the repository    * @param {string} [options.homepage] - A URL with more information about the repository    * @param {boolean} [options.private] - Either true to make the repository private, or false to make it public.    * @param {boolean} [options.has_issues] - Either true to enable issues for this repository, false to disable them.    * @param {boolean} [options.has_wiki] - Either true to enable the wiki for this repository, false to disable it.    * @param {boolean} [options.has_downloads] - Either true to enable downloads, false to disable them.    * @param {string} [options.default_branch] - Updates the default branch for this repository.    * @param {Requestable.callback} cb - will receive the updated repository back    * @return {Promise} - the promise for the http request    */   updateRepository(options, cb) {      return this._request('PATCH', `/repos/${this.__fullname}`, options, cb);   }  /**    * Get information about the repository    * @see https://developer.github.com/v3/repos/#get    * @param {Requestable.callback} cb - will receive the information about the repository    * @return {Promise} - the promise for the http request    */   getDetails(cb) {      return this._request('GET', `/repos/${this.__fullname}`, null, cb);   }   /**    * List the contributors to the repository    * @see https://developer.github.com/v3/repos/#list-contributors    * @param {Requestable.callback} cb - will receive the list of contributors    * @return {Promise} - the promise for the http request    */   getContributors(cb) {      return this._request('GET', `/repos/${this.__fullname}/contributors`, null, cb);   }   /**    * List the contributor stats to the repository    * @see https://developer.github.com/v3/repos/#list-contributors    * @param {Requestable.callback} cb - will receive the list of contributors    * @return {Promise} - the promise for the http request    */   getContributorStats(cb) {      return this._request('GET', `/repos/${this.__fullname}/stats/contributors`, null, cb);   }   /**    * List the users who are collaborators on the repository. The currently authenticated user must have    * push access to use this method    * @see https://developer.github.com/v3/repos/collaborators/#list-collaborators    * @param {Requestable.callback} cb - will receive the list of collaborators    * @return {Promise} - the promise for the http request    */   getCollaborators(cb) {      return this._request('GET', `/repos/${this.__fullname}/collaborators`, null, cb);   }   /**    * Check if a user is a collaborator on the repository    * @see https://developer.github.com/v3/repos/collaborators/#check-if-a-user-is-a-collaborator    * @param {string} username - the user to check    * @param {Requestable.callback} cb - will receive true if the user is a collaborator and false if they are not    * @return {Promise} - the promise for the http request {Boolean} [description]    */   isCollaborator(username, cb) {      return this._request('GET', `/repos/${this.__fullname}/collaborators/${username}`, null, cb);   }   /**    * Get the contents of a repository    * @see https://developer.github.com/v3/repos/contents/#get-contents    * @param {string} ref - the ref to check    * @param {string} path - the path containing the content to fetch    * @param {boolean} raw - `true` if the results should be returned raw instead of GitHub's normalized format    * @param {Requestable.callback} cb - will receive the fetched data    * @return {Promise} - the promise for the http request    */   getContents(ref, path, raw, cb) {      path = path ? `${encodeURI(path)}` : '';      return this._request('GET', `/repos/${this.__fullname}/contents/${path}`, {         ref,      }, cb, raw);   }   /**    * Get the README of a repository    * @see https://developer.github.com/v3/repos/contents/#get-the-readme    * @param {string} ref - the ref to check    * @param {boolean} raw - `true` if the results should be returned raw instead of GitHub's normalized format    * @param {Requestable.callback} cb - will receive the fetched data    * @return {Promise} - the promise for the http request    */   getReadme(ref, raw, cb) {      return this._request('GET', `/repos/${this.__fullname}/readme`, {         ref,      }, cb, raw);   }   /**    * Fork a repository    * @see https://developer.github.com/v3/repos/forks/#create-a-fork    * @param {Requestable.callback} cb - will receive the information about the newly created fork    * @return {Promise} - the promise for the http request    */   fork(cb) {      return this._request('POST', `/repos/${this.__fullname}/forks`, null, cb);   }   /**    * List a repository's forks    * @see https://developer.github.com/v3/repos/forks/#list-forks    * @param {Requestable.callback} cb - will receive the list of repositories forked from this one    * @return {Promise} - the promise for the http request    */   listForks(cb) {      return this._request('GET', `/repos/${this.__fullname}/forks`, null, cb);   }   /**    * Create a new branch from an existing branch.    * @param {string} [oldBranch=master] - the name of the existing branch    * @param {string} newBranch - the name of the new branch    * @param {Requestable.callback} cb - will receive the commit data for the head of the new branch    * @return {Promise} - the promise for the http request    */   createBranch(oldBranch, newBranch, cb) {      if (typeof newBranch === 'function') {         cb = newBranch;         newBranch = oldBranch;         oldBranch = 'master';      }      return this.getRef(`heads/${oldBranch}`)         .then((response) => {            let sha = response.data.object.sha;            return this.createRef({               sha,               ref: `refs/heads/${newBranch}`,            }, cb);         });   }   /**    * Create a new pull request    * @see https://developer.github.com/v3/pulls/#create-a-pull-request    * @param {Object} options - the pull request description    * @param {Requestable.callback} cb - will receive the new pull request    * @return {Promise} - the promise for the http request    */   createPullRequest(options, cb) {      return this._request('POST', `/repos/${this.__fullname}/pulls`, options, cb);   }   /**    * Update a pull request    * @see https://developer.github.com/v3/pulls/#update-a-pull-request    * @param {number|string} number - the number of the pull request to update    * @param {Object} options - the pull request description    * @param {Requestable.callback} [cb] - will receive the pull request information    * @return {Promise} - the promise for the http request    */   updatePullRequest(number, options, cb) {      return this._request('PATCH', `/repos/${this.__fullname}/pulls/${number}`, options, cb);   }   /**    * List the hooks for the repository    * @see https://developer.github.com/v3/repos/hooks/#list-hooks    * @param {Requestable.callback} cb - will receive the list of hooks    * @return {Promise} - the promise for the http request    */   listHooks(cb) {      return this._request('GET', `/repos/${this.__fullname}/hooks`, null, cb);   }   /**    * Get a hook for the repository    * @see https://developer.github.com/v3/repos/hooks/#get-single-hook    * @param {number} id - the id of the webook    * @param {Requestable.callback} cb - will receive the details of the webook    * @return {Promise} - the promise for the http request    */   getHook(id, cb) {      return this._request('GET', `/repos/${this.__fullname}/hooks/${id}`, null, cb);   }   /**    * Add a new hook to the repository    * @see https://developer.github.com/v3/repos/hooks/#create-a-hook    * @param {Object} options - the configuration describing the new hook    * @param {Requestable.callback} cb - will receive the new webhook    * @return {Promise} - the promise for the http request    */   createHook(options, cb) {      return this._request('POST', `/repos/${this.__fullname}/hooks`, options, cb);   }   /**    * Edit an existing webhook    * @see https://developer.github.com/v3/repos/hooks/#edit-a-hook    * @param {number} id - the id of the webhook    * @param {Object} options - the new description of the webhook    * @param {Requestable.callback} cb - will receive the updated webhook    * @return {Promise} - the promise for the http request    */   updateHook(id, options, cb) {      return this._request('PATCH', `/repos/${this.__fullname}/hooks/${id}`, options, cb);   }   /**    * Delete a webhook    * @see https://developer.github.com/v3/repos/hooks/#delete-a-hook    * @param {number} id - the id of the webhook to be deleted    * @param {Requestable.callback} cb - will receive true if the call is successful    * @return {Promise} - the promise for the http request    */   deleteHook(id, cb) {      return this._request('DELETE', `${this.__fullname}/hooks/${id}`, null, cb);   }   /**    * List the deploy keys for the repository    * @see https://developer.github.com/v3/repos/keys/#list-deploy-keys    * @param {Requestable.callback} cb - will receive the list of deploy keys    * @return {Promise} - the promise for the http request    */   listKeys(cb) {      return this._request('GET', `/repos/${this.__fullname}/keys`, null, cb);   }   /**    * Get a deploy key for the repository    * @see https://developer.github.com/v3/repos/keys/#get-a-deploy-key    * @param {number} id - the id of the deploy key    * @param {Requestable.callback} cb - will receive the details of the deploy key    * @return {Promise} - the promise for the http request    */   getKey(id, cb) {      return this._request('GET', `/repos/${this.__fullname}/keys/${id}`, null, cb);   }   /**    * Add a new deploy key to the repository    * @see https://developer.github.com/v3/repos/keys/#add-a-new-deploy-key    * @param {Object} options - the configuration describing the new deploy key    * @param {Requestable.callback} cb - will receive the new deploy key    * @return {Promise} - the promise for the http request    */   createKey(options, cb) {      return this._request('POST', `/repos/${this.__fullname}/keys`, options, cb);   }   /**    * Delete a deploy key    * @see https://developer.github.com/v3/repos/keys/#remove-a-deploy-key    * @param {number} id - the id of the deploy key to be deleted    * @param {Requestable.callback} cb - will receive true if the call is successful    * @return {Promise} - the promise for the http request    */   deleteKey(id, cb) {      return this._request('DELETE', `/repos/${this.__fullname}/keys/${id}`, null, cb);   }   /**    * Delete a file from a branch    * @see https://developer.github.com/v3/repos/contents/#delete-a-file    * @param {string} branch - the branch to delete from, or the default branch if not specified    * @param {string} path - the path of the file to remove    * @param {Requestable.callback} cb - will receive the commit in which the delete occurred    * @return {Promise} - the promise for the http request    */   deleteFile(branch, path, cb) {      return this.getSha(branch, path)         .then((response) => {            const deleteCommit = {               message: `Delete the file at '${path}'`,               sha: response.data.sha,               branch,            };            return this._request('DELETE', `/repos/${this.__fullname}/contents/${path}`, deleteCommit, cb);         });   }   /**    * Change all references in a repo from oldPath to new_path    * @param {string} branch - the branch to carry out the reference change, or the default branch if not specified    * @param {string} oldPath - original path    * @param {string} newPath - new reference path    * @param {Requestable.callback} cb - will receive the commit in which the move occurred    * @return {Promise} - the promise for the http request    */   move(branch, oldPath, newPath, cb) {      let oldSha;      return this.getRef(`heads/${branch}`)         .then(({data: {object}}) => this.getTree(`${object.sha}?recursive=true`))         .then(({data: {tree, sha}}) => {            oldSha = sha;            let newTree = tree.map((ref) => {               if (ref.path === oldPath) {                  ref.path = newPath;               }               if (ref.type === 'tree') {                  delete ref.sha;               }               return ref;            });            return this.createTree(newTree);         })         .then(({data: tree}) => this.commit(oldSha, tree.sha, `Renamed '${oldPath}' to '${newPath}'`))         .then(({data: commit}) => this.updateHead(`heads/${branch}`, commit.sha, true, cb));   }   /**    * Write a file to the repository    * @see https://developer.github.com/v3/repos/contents/#update-a-file    * @param {string} branch - the name of the branch    * @param {string} path - the path for the file    * @param {string} content - the contents of the file    * @param {string} message - the commit message    * @param {Object} [options] - commit options    * @param {Object} [options.author] - the author of the commit    * @param {Object} [options.commiter] - the committer    * @param {boolean} [options.encode] - true if the content should be base64 encoded    * @param {Requestable.callback} cb - will receive the new commit    * @return {Promise} - the promise for the http request    */   writeFile(branch, path, content, message, options, cb) {      if (typeof options === 'function') {         cb = options;         options = {};      }      let filePath = path ? encodeURI(path) : '';      let shouldEncode = options.encode !== false;      let commit = {         branch,         message,         author: options.author,         committer: options.committer,         content: shouldEncode ? Base64.encode(content) : content,      };      return this.getSha(branch, filePath)         .then((response) => {            commit.sha = response.data.sha;            return this._request('PUT', `/repos/${this.__fullname}/contents/${filePath}`, commit, cb);         }, () => {            return this._request('PUT', `/repos/${this.__fullname}/contents/${filePath}`, commit, cb);         });   }   /**    * Check if a repository is starred by you    * @see https://developer.github.com/v3/activity/starring/#check-if-you-are-starring-a-repository    * @param {Requestable.callback} cb - will receive true if the repository is starred and false if the repository    *                                  is not starred    * @return {Promise} - the promise for the http request {Boolean} [description]    */   isStarred(cb) {      return this._request204or404(`/user/starred/${this.__fullname}`, null, cb);   }   /**    * Star a repository    * @see https://developer.github.com/v3/activity/starring/#star-a-repository    * @param {Requestable.callback} cb - will receive true if the repository is starred    * @return {Promise} - the promise for the http request    */   star(cb) {      return this._request('PUT', `/user/starred/${this.__fullname}`, null, cb);   }   /**    * Unstar a repository    * @see https://developer.github.com/v3/activity/starring/#unstar-a-repository    * @param {Requestable.callback} cb - will receive true if the repository is unstarred    * @return {Promise} - the promise for the http request    */   unstar(cb) {      return this._request('DELETE', `/user/starred/${this.__fullname}`, null, cb);   }   /**    * Create a new release    * @see https://developer.github.com/v3/repos/releases/#create-a-release    * @param {Object} options - the description of the release    * @param {Requestable.callback} cb - will receive the newly created release    * @return {Promise} - the promise for the http request    */   createRelease(options, cb) {      return this._request('POST', `/repos/${this.__fullname}/releases`, options, cb);   }   /**    * Edit a release    * @see https://developer.github.com/v3/repos/releases/#edit-a-release    * @param {string} id - the id of the release    * @param {Object} options - the description of the release    * @param {Requestable.callback} cb - will receive the modified release    * @return {Promise} - the promise for the http request    */   updateRelease(id, options, cb) {      return this._request('PATCH', `/repos/${this.__fullname}/releases/${id}`, options, cb);   }   /**    * Get information about all releases    * @see https://developer.github.com/v3/repos/releases/#list-releases-for-a-repository    * @param {Requestable.callback} cb - will receive the release information    * @return {Promise} - the promise for the http request    */   listReleases(cb) {      return this._request('GET', `/repos/${this.__fullname}/releases`, null, cb);   }   /**    * Get information about a release    * @see https://developer.github.com/v3/repos/releases/#get-a-single-release    * @param {string} id - the id of the release    * @param {Requestable.callback} cb - will receive the release information    * @return {Promise} - the promise for the http request    */   getRelease(id, cb) {      return this._request('GET', `/repos/${this.__fullname}/releases/${id}`, null, cb);   }   /**    * Delete a release    * @see https://developer.github.com/v3/repos/releases/#delete-a-release    * @param {string} id - the release to be deleted    * @param {Requestable.callback} cb - will receive true if the operation is successful    * @return {Promise} - the promise for the http request    */   deleteRelease(id, cb) {      return this._request('DELETE', `/repos/${this.__fullname}/releases/${id}`, null, cb);   }   /**    * Merge a pull request    * @see https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button    * @param {number|string} number - the number of the pull request to merge    * @param {Object} options - the merge options for the pull request    * @param {Requestable.callback} [cb] - will receive the merge information if the operation is successful    * @return {Promise} - the promise for the http request    */   mergePullRequest(number, options, cb) {      return this._request('PUT', `/repos/${this.__fullname}/pulls/${number}/merge`, options, cb);   }   /**    * Get information about all projects    * @see https://developer.github.com/v3/projects/#list-repository-projects    * @param {Requestable.callback} [cb] - will receive the list of projects    * @return {Promise} - the promise for the http request    */   listProjects(cb) {      return this._requestAllPages(`/repos/${this.__fullname}/projects`, {AcceptHeader: 'inertia-preview'}, cb);   }   /**    * Create a new project    * @see https://developer.github.com/v3/projects/#create-a-repository-project    * @param {Object} options - the description of the project    * @param {Requestable.callback} cb - will receive the newly created project    * @return {Promise} - the promise for the http request    */   createProject(options, cb) {      options = options || {};      options.AcceptHeader = 'inertia-preview';      return this._request('POST', `/repos/${this.__fullname}/projects`, options, cb);   }}module.exports = Repository;


[8]ページ先頭

©2009-2025 Movatter.jp