hunk.code_window:   return Promise.resolve({
       name,
       fullname: name + '#' + hash(pkg.raw),
       dist: {
  
hunk.labels: keep keep keep replace keep
hunk.after_edit:     fullname: name + '#' + hash(pkg.rawSpec),
  
hunk.file_path: lib/resolve/tarball.js
hunk.type: replace
file: 'use strict'
  const pkgFullName = require('../pkg_full_name')
  
  /**
   * Resolves a 'hosted' package hosted on 'github'.
   */
  
  const PARSE_GITHUB_RE = /^github:([^\/]+)\/([^#]+)(#(.+))?$/
  
  module.exports = function resolveGithub (pkg, opts) {
    const getJSON = opts.got.getJSON
    const spec = parseGithubSpec(pkg)
    return resolveRef(spec).then(ref => {
      spec.ref = ref
      return resolvePackageJson(spec).then(pkg => ({
        name: pkg.name,
        version: pkg.version,
        fullname: pkgFullName({
          name: pkg.name,
          version: ['github', spec.owner, spec.repo, spec.ref].join(pkgFullName.delimiter)
        }),
        dist: {
          tarball: [
            'https://api.github.com/repos',
            spec.owner,
            spec.repo,
            'tarball',
            spec.ref
          ].join('/')
        }
      }))
    })
  
    function resolvePackageJson (spec) {
      const url = [
        'https://api.github.com/repos',
        spec.owner,
        spec.repo,
        'contents/package.json?ref=' + spec.ref
      ].join('/')
      return getJSON(url).then(body => {
        const content = new Buffer(body.content, 'base64').toString('utf8')
        return JSON.parse(content)
      })
    }
  
    function resolveRef (spec) {
      const url = [
        'https://api.github.com/repos',
        spec.owner,
        spec.repo,
        'commits',
        spec.ref
      ].join('/')
      return getJSON(url).then(body => body.sha)
    }
  }
  
  function parseGithubSpec (pkg) {
    const m = PARSE_GITHUB_RE.exec(pkg.hosted.shortcut)
    if (!m) {
      throw new Error('cannot parse: ' + pkg.hosted.shortcut)
    }
    const owner = m[1]
    const repo = m[2]
    const ref = m[4] || 'HEAD'
    return {owner, repo, ref}
  }
  