def test_ahead(self): commit_files(['file2.txt'], 'add file2') old_rev = git_utils.get_latest_commit('master') git_utils.try_rebase_branch('origin', 'master') new_rev = git_utils.get_latest_commit('master') self.assertEqual(old_rev, new_rev)
def test_nonexistent_remote(self): old_rev = git_utils.get_latest_commit('master') check_call_silent(['git', 'fetch', 'origin']) git_utils.try_rebase_branch('upstream', 'master') new_rev = git_utils.get_latest_commit('master') self.assertEqual(old_rev, new_rev)
def test_behind(self): check_call_silent(['git', 'checkout', 'master']) commit_files(['file2.txt'], 'second commit') rev = git_utils.get_latest_commit('master') git_utils.update_ref('branch', rev) self.assertEqual(git_utils.get_latest_commit('branch'), rev)
def test_diverged_remote(self): self._deploy() stage_dir('set_default_clone') check_call_silent(['git', 'clone', self.stage, '.']) check_call_silent(['git', 'fetch', 'origin', 'gh-pages:gh-pages']) git_config() with pushd(self.stage): self._deploy(versions=['2.0']) origin_rev = git_utils.get_latest_commit('gh-pages') self._deploy(versions=['2.1']) clone_rev = git_utils.get_latest_commit('gh-pages') check_call_silent(['git', 'fetch', 'origin']) assertOutput( self, ['mike', 'set-default', '1.0'], output=( 'error: gh-pages has diverged from origin/gh-pages\n' + ' Pass --ignore to ignore this or --rebase to rebase onto ' + 'remote\n'), returncode=1) self.assertEqual(git_utils.get_latest_commit('gh-pages'), clone_rev) assertPopen(['mike', 'set-default', '--ignore', '1.0']) self.assertEqual(git_utils.get_latest_commit('gh-pages^'), clone_rev) assertPopen(['mike', 'set-default', '--rebase', '1.0']) self.assertEqual(git_utils.get_latest_commit('gh-pages^'), origin_rev)
def test_diverged_remote(self): stage_dir('serve_clone') check_call_silent(['git', 'clone', self.stage, '.']) check_call_silent(['git', 'fetch', 'origin', 'gh-pages:gh-pages']) git_config() with pushd(self.stage): with git_utils.Commit('gh-pages', 'add file') as commit: commit.add_file( git_utils.FileInfo('file-origin.txt', 'this is some text')) origin_rev = git_utils.get_latest_commit('gh-pages') with git_utils.Commit('gh-pages', 'add file') as commit: commit.add_file(git_utils.FileInfo('file.txt', 'this is some text')) clone_rev = git_utils.get_latest_commit('gh-pages') check_call_silent(['git', 'fetch', 'origin']) self._check_serve(err_output=( 'warning: gh-pages has diverged from origin/gh-pages\n' + ' Pass --ignore to ignore this or --rebase to rebase onto ' + 'remote\n')) self.assertEqual(git_utils.get_latest_commit('gh-pages'), clone_rev) self._check_serve(['--ignore']) self.assertEqual(git_utils.get_latest_commit('gh-pages'), clone_rev) self._check_serve(['--rebase']) self.assertEqual(git_utils.get_latest_commit('gh-pages'), origin_rev)
def test_push(self): commit_files(['file2.txt'], 'add file2') clone_rev = git_utils.get_latest_commit('master') git_utils.push_branch('origin', 'master') with pushd(self.origin): origin_rev = git_utils.get_latest_commit('master') self.assertEqual(origin_rev, clone_rev)
def test_local_empty(self): origin_rev = git_utils.get_latest_commit('gh-pages') stage_dir('serve_clone') check_call_silent(['git', 'clone', self.stage, '.']) git_config() self._check_serve() self.assertEqual(git_utils.get_latest_commit('gh-pages'), origin_rev)
def test_nonexistent_local(self): check_call_silent(['git', 'checkout', '-b', 'branch']) check_call_silent(['git', 'branch', '-d', 'master']) with pushd(self.origin): origin_rev = git_utils.get_latest_commit('master') git_utils.try_rebase_branch('origin', 'master') local_rev = git_utils.get_latest_commit('master') self.assertEqual(local_rev, origin_rev)
def test_local_empty(self): self._deploy() origin_rev = git_utils.get_latest_commit('gh-pages') stage_dir('set_default_clone') check_call_silent(['git', 'clone', self.stage, '.']) git_config() assertPopen(['mike', 'set-default', '1.0']) self.assertEqual(git_utils.get_latest_commit('gh-pages^'), origin_rev)
def test_remote_empty(self): stage_dir('delete_clone') check_call_silent(['git', 'clone', self.stage, '.']) git_config() self._deploy(versions=['1.0']) old_rev = git_utils.get_latest_commit('gh-pages') assertPopen(['mike', 'delete', '1.0']) self.assertEqual(git_utils.get_latest_commit('gh-pages^'), old_rev)
def test_behind(self): old_rev = git_utils.get_latest_commit('master') with pushd(self.origin): commit_files(['file2.txt'], 'add file2') origin_rev = git_utils.get_latest_commit('master') check_call_silent(['git', 'fetch', 'origin']) git_utils.try_rebase_branch('origin', 'master') new_rev = git_utils.get_latest_commit('master') self.assertNotEqual(old_rev, origin_rev) self.assertEqual(new_rev, origin_rev)
def test_diverged(self): commit_files(['file2.txt'], 'add file2') old_rev = git_utils.get_latest_commit('master') with pushd(self.origin): commit_files(['file2-origin.txt'], 'add file2') check_call_silent(['git', 'fetch', 'origin']) self.assertRaises(git_utils.GitBranchDiverged, git_utils.try_rebase_branch, 'origin', 'master') new_rev = git_utils.get_latest_commit('master') self.assertEqual(old_rev, new_rev)
def test_force_push(self): with pushd(self.origin): commit_file('file2.txt', 'add file2') commit_file('file2.txt', 'add file2 from clone') clone_rev = git_utils.get_latest_commit('master') git_utils.push_branch('origin', 'master', force=True) with pushd(self.origin): origin_rev = git_utils.get_latest_commit('master') self.assertEqual(origin_rev, clone_rev)
def test_local_empty(self): with git_utils.Commit('gh-pages', 'add file') as commit: commit.add_file(git_utils.FileInfo('file.txt', 'this is some text')) origin_rev = git_utils.get_latest_commit('gh-pages') stage_dir('deploy_clone') check_call_silent(['git', 'clone', self.stage, '.']) git_config() assertPopen(['mike', 'deploy', '1.0']) self.assertEqual(git_utils.get_latest_commit('gh-pages^'), origin_rev)
def test_diverged_force(self): commit_file('file2.txt', 'add file2') old_rev = git_utils.get_latest_commit('master') with pushd(self.origin): commit_file('file2-origin.txt', 'add file2') origin_rev = git_utils.get_latest_commit('master') check_call_silent(['git', 'fetch', 'origin']) git_utils.try_rebase_branch('origin', 'master', force=True) new_rev = git_utils.get_latest_commit('master') self.assertNotEqual(old_rev, origin_rev) self.assertEqual(new_rev, origin_rev)
def test_push(self): check_call_silent(['git', 'config', 'receive.denyCurrentBranch', 'ignore']) stage_dir('deploy_clone') check_call_silent(['git', 'clone', self.stage, '.']) git_config() assertPopen(['mike', 'deploy', '1.0', '-p']) clone_rev = git_utils.get_latest_commit('gh-pages') with pushd(self.stage): self.assertEqual(git_utils.get_latest_commit('gh-pages'), clone_rev)
def test_behind_remote(self): stage_dir('serve_clone') check_call_silent(['git', 'clone', self.stage, '.']) check_call_silent(['git', 'fetch', 'origin', 'gh-pages:gh-pages']) git_config() with pushd(self.stage): with git_utils.Commit('gh-pages', 'add file') as commit: commit.add_file( git_utils.FileInfo('file.txt', 'this is some text')) origin_rev = git_utils.get_latest_commit('gh-pages') check_call_silent(['git', 'fetch', 'origin']) self._check_serve() self.assertEqual(git_utils.get_latest_commit('gh-pages'), origin_rev)
def test_ahead_remote(self): self._deploy(versions=['1.0']) origin_rev = git_utils.get_latest_commit('gh-pages') stage_dir('deploy_clone') check_call_silent(['git', 'clone', self.stage, '.']) check_call_silent(['git', 'fetch', 'origin', 'gh-pages:gh-pages']) git_config() self._deploy(versions=['2.0']) old_rev = git_utils.get_latest_commit('gh-pages') assertPopen(['mike', 'delete', '1.0']) self.assertEqual(git_utils.get_latest_commit('gh-pages^'), old_rev) self.assertEqual(git_utils.get_latest_commit('gh-pages^^'), origin_rev)
def test_behind_remote(self): self._deploy() stage_dir('set_default_clone') check_call_silent(['git', 'clone', self.stage, '.']) check_call_silent(['git', 'fetch', 'origin', 'gh-pages:gh-pages']) git_config() with pushd(self.stage): self._deploy(versions=['2.0']) origin_rev = git_utils.get_latest_commit('gh-pages') check_call_silent(['git', 'fetch', 'origin']) assertPopen(['mike', 'set-default', '1.0']) self.assertEqual(git_utils.get_latest_commit('gh-pages^'), origin_rev)
def _test_deploy(self, expected_message=None, expected_versions=[versions.VersionInfo('1.0')], redirect=True, directory='.'): rev = git_utils.get_latest_commit('master', short=True) message = assertPopen(['git', 'log', '-1', '--pretty=%B']).rstrip() if expected_message: self.assertEqual(message, expected_message) else: self.assertRegex( message, r'^Deployed {} to {}( in .*)? with MkDocs \S+ and mike \S+$' .format(rev, expected_versions[0].version) ) files = {'versions.json'} for v in expected_versions: v_str = str(v.version) files |= {v_str, v_str + '/index.html', v_str + '/css/version-select.css', v_str + '/js/version-select.js'} for a in v.aliases: files |= {a, a + '/index.html'} if not redirect: files |= {a + '/css/version-select.css', a + '/js/version-select.js'} assertDirectory(directory, files, allow_extra=True) with open(os.path.join(directory, 'versions.json')) as f: self.assertEqual(list(versions.Versions.loads(f.read())), expected_versions)
def test_ahead_remote(self): origin_rev = git_utils.get_latest_commit('gh-pages') stage_dir('list_clone') check_call_silent(['git', 'clone', self.stage, '.']) check_call_silent(['git', 'fetch', 'origin', 'gh-pages:gh-pages']) git_config() with git_utils.Commit('gh-pages', 'add file') as commit: commit.add_file(git_utils.FileInfo('file.txt', 'this is some text')) clone_rev = git_utils.get_latest_commit('gh-pages') self._check_list() self.assertEqual(git_utils.get_latest_commit('gh-pages'), clone_rev) self.assertEqual(git_utils.get_latest_commit('gh-pages^'), origin_rev)
def _test_deploy(self, expected_message=None, expected_versions=[versions.VersionInfo('1.0')]): rev = git_utils.get_latest_commit('master', short=True) message = subprocess.check_output(['git', 'log', '-1', '--pretty=%B'], universal_newlines=True).rstrip() if expected_message: self.assertEqual(message, expected_message) else: self.assertRegex( message, r'^Deployed {} to {} with MkDocs \S+ and mike \S+$' .format(rev, expected_versions[0].version) ) dirs = set() for i in expected_versions: dirs |= {str(i.version)} | i.aliases contents = {'versions.json'} | set(chain.from_iterable( (d, d + '/index.html') for d in dirs )) assertDirectory('.', contents, allow_extra=True) with open('versions.json') as f: self.assertEqual(list(versions.Versions.loads(f.read())), expected_versions)
def test_ahead(self): rev = git_utils.get_latest_commit('master') commit_files(['file2.txt'], 'second commit') self.assertEqual(git_utils.get_merge_base('branch', 'master'), rev) self.assertEqual(git_utils.compare_branches('branch', 'master'), git_utils.BranchStatus.ahead)
def test_behind(self): rev = git_utils.get_latest_commit('master') check_call_silent(['git', 'checkout', 'master']) commit_files(['file2.txt'], 'second commit') self.assertEqual(git_utils.get_merge_base('branch', 'master'), rev) self.assertEqual(git_utils.compare_branches('branch', 'master'), git_utils.BranchStatus.behind)
def _test_deploy(self, expected_message=None, expected_versions=[versions.VersionInfo('1.0')]): if not expected_message: rev = git_utils.get_latest_commit('master', short=True) expected_message = ( r'^Deployed {} to {} with MkDocs \S+ and mike \S+$'.format( rev, expected_versions[0].version)) self._test_state(expected_message, expected_versions)
def _test_deploy(self, expected_message=None, expected_versions=[versions.VersionInfo('1.0')], **kwargs): if not expected_message: rev = git_utils.get_latest_commit('master', short=True) expected_message = ( r'^Deployed {} to {}( in .*)? with MkDocs \S+ and mike \S+$'. format(rev, expected_versions[0].version)) if os.path.exists(self.cfg.site_dir): shutil.rmtree(self.cfg.site_dir) self._test_state(expected_message, expected_versions, **kwargs)
def test_diverged_remote(self): with git_utils.Commit('gh-pages', 'add file') as commit: commit.add_file(git_utils.FileInfo( 'file.txt', 'this is some text' )) stage_dir('deploy_clone') check_call_silent(['git', 'clone', self.stage, '.']) check_call_silent(['git', 'fetch', 'origin', 'gh-pages:gh-pages']) git_config() with pushd(self.stage): with git_utils.Commit('gh-pages', 'add file') as commit: commit.add_file(git_utils.FileInfo( 'file2-origin.txt', 'this is some text' )) origin_rev = git_utils.get_latest_commit('gh-pages') with git_utils.Commit('gh-pages', 'add file') as commit: commit.add_file(git_utils.FileInfo( 'file2.txt', 'this is some text' )) clone_rev = git_utils.get_latest_commit('gh-pages') check_call_silent(['git', 'fetch', 'origin']) assertOutput(self, ['mike', 'deploy', '1.0'], output=( 'error: gh-pages has diverged from origin/gh-pages\n' + ' Pass --ignore to ignore this or --rebase to rebase onto ' + 'remote\n' ), returncode=1) self.assertEqual(git_utils.get_latest_commit('gh-pages'), clone_rev) assertPopen(['mike', 'deploy', '1.0', '--ignore']) self.assertEqual(git_utils.get_latest_commit('gh-pages^'), clone_rev) assertPopen(['mike', 'deploy', '1.0', '--rebase']) self.assertEqual(git_utils.get_latest_commit('gh-pages^'), origin_rev)
def test_short(self): rev = git_utils.get_latest_commit('master', short=True) expected_rev = check_output(['git', 'rev-parse', 'master']).rstrip() self.assertEqual(rev, expected_rev[0:len(rev)])
def test_even(self): rev = git_utils.get_latest_commit('master') self.assertEqual(git_utils.get_merge_base('branch', 'master'), rev) self.assertEqual(git_utils.compare_branches('branch', 'master'), git_utils.BranchStatus.even)
def _test_rev(self, branch): clone_rev = git_utils.get_latest_commit(branch) with pushd(self.stage_origin): self.assertEqual(git_utils.get_latest_commit(branch), clone_rev)