Source code for asv.plugins.github

# Licensed under a 3-clause BSD style license - see LICENSE.rst

import os

from .. import util
from ..commands import Command
from ..commands.publish import Publish
from ..console import log


[docs] class GithubPages(Command): @classmethod
[docs] def setup_arguments(cls, subparsers): parser = subparsers.add_parser( "gh-pages", help="Publish the results to Github pages", description=""" Publish the results to github pages Updates the 'gh-pages' branch in the current repository, and pushes it to 'origin'. """, ) parser.add_argument( "--no-push", action="store_true", help="Update local gh-pages branch but don't push" ) parser.add_argument( "--rewrite", action="store_true", help=( "Rewrite gh-pages branch to contain only a single commit, " "instead of adding a new commit" ), ) parser.set_defaults(func=cls.run_from_args) return parser
@classmethod
[docs] def run_from_conf_args(cls, conf, args): return cls.run(conf=conf, no_push=args.no_push, rewrite=args.rewrite)
@classmethod
[docs] def run(cls, conf, no_push, rewrite): git = util.which('git') # Publish Publish.run(conf) cwd = os.path.abspath(os.getcwd()) log.info("Updating gh-pages branch") try: # Create new repo for the html data util.check_call([git, 'init'], cwd=conf.html_dir) util.check_call([git, 'checkout', '-b', 'gh-pages'], cwd=conf.html_dir) if not rewrite: # Fetch the old branch _, _, retcode = util.check_output( [git, 'fetch', cwd, 'gh-pages'], cwd=conf.html_dir, return_stderr=True, valid_return_codes=None, ) if retcode == 0: util.check_call([git, 'reset', '--soft', 'FETCH_HEAD'], cwd=conf.html_dir) # We need to tell github this is not a Jekyll document with open(os.path.join(conf.html_dir, '.nojekyll'), 'wb') as fd: fd.write(b'\n') # Add all files util.check_call([git, 'add', '--all', '.'], cwd=conf.html_dir) # Commit (if needed) _, _, retcode = util.check_output( [git, "diff-index", "--quiet", "HEAD", "--"], cwd=conf.html_dir, return_stderr=True, valid_return_codes=None, ) if retcode != 0: util.check_call([git, 'commit', '-m', 'Generated from sources'], cwd=conf.html_dir) # Fetch branch here if rewrite: util.check_call([git, 'fetch', os.path.abspath(conf.html_dir)]) util.check_call([git, 'branch', '-f', 'gh-pages', 'FETCH_HEAD']) else: util.check_call( [git, 'fetch', os.path.abspath(conf.html_dir), 'gh-pages:gh-pages'] ) finally: # Cleanup the child repo under html util.long_path_rmtree(os.path.join(conf.html_dir, '.git')) # Push branch if not no_push: if rewrite: log.info("Force-pushing gh-pages branch") util.check_call([git, 'push', '-f', 'origin', 'gh-pages']) else: log.info("Pushing gh-pages branch") util.check_call([git, 'push', 'origin', 'gh-pages'])