Skip to content

Commit dd9826a

Browse files
jimporterPigeonF
andcommitted
Consult deploy prefix when deleting files during deploy; resolves #227
Co-Authored-By: Jonas Fierlings <[email protected]>
1 parent 91cf5ee commit dd9826a

File tree

3 files changed

+123
-15
lines changed

3 files changed

+123
-15
lines changed

Diff for: mike/commands.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def deploy(cfg, version, title=None, aliases=[], update_aliases=False,
9191
t = _redirect_template(template)
9292

9393
with git_utils.Commit(branch, message, allow_empty=allow_empty) as commit:
94-
commit.delete_files([version_str] + list(info.aliases))
94+
commit.delete_files([destdir] + alias_destdirs)
9595

9696
for f in git_utils.walk_real_files(cfg['site_dir']):
9797
canonical_file = f.copy(destdir, cfg['site_dir'])

Diff for: test/__init__.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,8 @@ def match_redir(url):
120120
return r'window\.location\.replace\(\s*"{}"'.format(re.escape(url))
121121

122122

123-
def assertDirectory(path, contents, include_hidden=False, allow_extra=False):
123+
def assertDirectory(path, contents, *, include_hidden=False,
124+
allow_extra=False):
124125
path = os.path.normpath(path)
125126
actual = set(os.path.normpath(os.path.join(base, f))
126127
for base, dirs, files in walk(path, include_hidden)

Diff for: test/unit/test_commands.py

+120-13
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ def setUp(self):
4949
commit_files(['page.html', 'file.txt', 'dir/index.html'])
5050

5151
def _test_state(self, expected_message, expected_versions,
52-
alias_type=AliasType.symlink, directory='.'):
52+
alias_type=AliasType.symlink, directory='.', *,
53+
allow_extra=False):
5354
message = check_output(['git', 'log', '-1', '--pretty=%B']).rstrip()
5455
self.assertRegex(message, expected_message)
5556

@@ -68,7 +69,7 @@ def _test_state(self, expected_message, expected_versions,
6869
a + '/dir/index.html'}
6970
if this_alias_type == AliasType.copy:
7071
files.add(a + '/file.txt')
71-
assertDirectory(directory, files)
72+
assertDirectory(directory, files, allow_extra=allow_extra)
7273

7374
with open(os.path.join(directory, 'versions.json')) as f:
7475
self.assertEqual(list(versions.Versions.loads(f.read())),
@@ -83,6 +84,8 @@ def setUp(self):
8384
self.cfg['site_dir'] = os.path.join(self.cfg['site_dir'], 'site')
8485

8586
def _mock_build(self):
87+
if os.path.exists(self.cfg['site_dir']):
88+
shutil.rmtree(self.cfg['site_dir'])
8689
copytree(self.stage, self.cfg['site_dir'])
8790

8891
def _test_deploy(self, expected_message=None,
@@ -227,6 +230,21 @@ def test_deploy_prefix(self):
227230
versions.VersionInfo('1.0', aliases=['latest'])
228231
], directory='prefix')
229232

233+
def test_mixed_deploy_prefixes(self):
234+
with commands.deploy(self.cfg, '1.0', aliases=['latest']):
235+
self._mock_build()
236+
with commands.deploy(self.cfg, '1.0', aliases=['latest'],
237+
deploy_prefix='prefix'):
238+
self._mock_build()
239+
240+
check_call_silent(['git', 'checkout', 'gh-pages'])
241+
self._test_deploy(expected_versions=[
242+
versions.VersionInfo('1.0', aliases=['latest'])
243+
], expected_message='.*', allow_extra=True)
244+
self._test_deploy(expected_versions=[
245+
versions.VersionInfo('1.0', aliases=['latest'])
246+
], directory='prefix')
247+
230248
def test_overwrite_version(self):
231249
with git_utils.Commit('gh-pages', 'add versions.json') as commit:
232250
commit.add_file(git_utils.FileInfo(
@@ -357,6 +375,18 @@ def test_deploy_prefix(self):
357375
check_call_silent(['git', 'checkout', 'gh-pages'])
358376
self._test_delete(directory='prefix')
359377

378+
def test_mixed_deploy_prefixes(self):
379+
self._deploy()
380+
self._deploy(deploy_prefix='prefix')
381+
commands.delete(['1.0'], deploy_prefix='prefix')
382+
check_call_silent(['git', 'checkout', 'gh-pages'])
383+
384+
self._test_delete(expected_versions=[
385+
versions.VersionInfo('2.0'),
386+
versions.VersionInfo('1.0', aliases=['stable']),
387+
], expected_message='.*', allow_extra=True)
388+
self._test_delete(directory='prefix')
389+
360390
def test_deploy_prefix_delete_all(self):
361391
self._deploy(deploy_prefix='prefix')
362392
commands.delete(all=True, deploy_prefix='prefix')
@@ -367,6 +397,22 @@ def test_deploy_prefix_delete_all(self):
367397
r'^Removed everything in prefix with mike \S+$')
368398
assertDirectory('prefix', set())
369399

400+
def test_mixed_deploy_prefixes_delete_all(self):
401+
self._deploy()
402+
self._deploy(deploy_prefix='prefix')
403+
commands.delete(all=True, deploy_prefix='prefix')
404+
check_call_silent(['git', 'checkout', 'gh-pages'])
405+
406+
self._test_delete(expected_versions=[
407+
versions.VersionInfo('2.0'),
408+
versions.VersionInfo('1.0', aliases=['stable']),
409+
], expected_message='.*', allow_extra=True)
410+
411+
message = check_output(['git', 'log', '-1', '--pretty=%B']).rstrip()
412+
self.assertRegex(message,
413+
r'^Removed everything in prefix with mike \S+$')
414+
assertDirectory('prefix', set())
415+
370416
def test_delete_invalid(self):
371417
self._deploy()
372418
self.assertRaises(ValueError, commands.delete)
@@ -510,6 +556,16 @@ def test_deploy_prefix(self):
510556
check_call_silent(['git', 'checkout', 'gh-pages'])
511557
self._test_alias(directory='prefix')
512558

559+
def test_mixed_deploy_prefixes(self):
560+
self._deploy()
561+
self._deploy(deploy_prefix='prefix')
562+
commands.alias(self.cfg, '1.0', ['greatest'], deploy_prefix='prefix')
563+
check_call_silent(['git', 'checkout', 'gh-pages'])
564+
565+
self._test_alias(expected_aliases=[], expected_message='.*',
566+
allow_extra=True)
567+
self._test_alias(directory='prefix')
568+
513569
def test_alias_invalid_version(self):
514570
self._deploy()
515571
self.assertRaises(ValueError, commands.alias, self.cfg, '2.0',
@@ -568,6 +624,20 @@ def test_deploy_prefix(self):
568624
{'hidden': True}
569625
)
570626

627+
def test_mixed_deploy_prefixes(self):
628+
self._commit_versions(versions.VersionInfo(
629+
'1.0', properties={'foo': True}
630+
))
631+
self._commit_versions(versions.VersionInfo(
632+
'1.0', properties={'bar': True}
633+
), deploy_prefix='prefix')
634+
635+
self.assertEqual(commands.get_property('1.0', ''), {'foo': True})
636+
self.assertEqual(
637+
commands.get_property('1.0', '', deploy_prefix='prefix'),
638+
{'bar': True}
639+
)
640+
571641
def test_invalid_version(self):
572642
self._commit_versions(versions.VersionInfo('1.0'))
573643
with self.assertRaises(ValueError):
@@ -652,6 +722,23 @@ def test_deploy_prefix(self):
652722
versions.VersionInfo('1.0', properties={'foo': {'bar': True}}),
653723
], directory='prefix')
654724

725+
def test_mixed_deploy_prefixes(self):
726+
self._commit_versions(versions.VersionInfo(
727+
'1.0', properties={'foo': {'bar': True}}
728+
))
729+
self._commit_versions(versions.VersionInfo('1.0'),
730+
deploy_prefix='prefix')
731+
commands.set_properties('1.0', [('zoo.goat', True)],
732+
deploy_prefix='prefix')
733+
734+
check_call_silent(['git', 'checkout', 'gh-pages'])
735+
self._test_set_properties([
736+
versions.VersionInfo('1.0', properties={'foo': {'bar': True}}),
737+
])
738+
self._test_set_properties([
739+
versions.VersionInfo('1.0', properties={'zoo': {'goat': True}}),
740+
], directory='prefix')
741+
655742
def test_invalid_version(self):
656743
self._commit_versions(versions.VersionInfo('1.0'))
657744
with self.assertRaises(ValueError):
@@ -670,25 +757,26 @@ def _deploy(self, branch='gh-pages', deploy_prefix=''):
670757
deploy_prefix=deploy_prefix):
671758
pass
672759

673-
def _test_retitle(self, expected_message=None, directory='.'):
760+
def _test_retitle(self, expected_message=None,
761+
expected_version=versions.VersionInfo('1.0', '1.0.1'),
762+
directory='.', *, allow_extra=False):
674763
message = check_output(['git', 'log', '-1', '--pretty=%B']).rstrip()
675-
if expected_message:
676-
self.assertEqual(message, expected_message)
677-
else:
678-
self.assertRegex(
679-
message,
680-
r'^Set title of \S+ to 1\.0\.1( in .*)? with mike \S+$'
764+
if not expected_message:
765+
expected_message = (
766+
r'^Set title of {} to {}( in .*)? with mike \S+$'
767+
.format(re.escape(str(expected_version.version)),
768+
re.escape(expected_version.title))
681769
)
770+
self.assertRegex(message, expected_message)
682771

683772
assertDirectory(directory, {
684773
'versions.json',
685774
'1.0',
686775
'1.0/file.txt'
687-
})
776+
}, allow_extra=allow_extra)
688777
with open(os.path.join(directory, 'versions.json')) as f:
689-
self.assertEqual(list(versions.Versions.loads(f.read())), [
690-
versions.VersionInfo('1.0', '1.0.1'),
691-
])
778+
self.assertEqual(list(versions.Versions.loads(f.read())),
779+
[expected_version])
692780

693781
def test_retitle(self):
694782
self._deploy()
@@ -714,6 +802,16 @@ def test_deploy_prefix(self):
714802
check_call_silent(['git', 'checkout', 'gh-pages'])
715803
self._test_retitle(directory='prefix')
716804

805+
def test_mixed_deploy_prefixes(self):
806+
self._deploy()
807+
self._deploy(deploy_prefix='prefix')
808+
commands.retitle('1.0', '1.0.1', deploy_prefix='prefix')
809+
check_call_silent(['git', 'checkout', 'gh-pages'])
810+
811+
self._test_retitle(expected_version=versions.VersionInfo('1.0'),
812+
expected_message='.*', allow_extra=True)
813+
self._test_retitle(directory='prefix')
814+
717815
def test_retitle_invalid(self):
718816
self._deploy()
719817
self.assertRaises(ValueError, commands.retitle, '2.0', '2.0.2')
@@ -785,6 +883,15 @@ def test_deploy_prefix(self):
785883
check_call_silent(['git', 'checkout', 'gh-pages'])
786884
self._test_default(directory='prefix')
787885

886+
def test_mixed_deploy_prefixes(self):
887+
self._deploy()
888+
self._deploy(deploy_prefix='prefix')
889+
commands.set_default('1.0', deploy_prefix='prefix')
890+
check_call_silent(['git', 'checkout', 'gh-pages'])
891+
892+
self.assertFalse(os.path.exists('./index.html'))
893+
self._test_default(directory='prefix')
894+
788895
def test_set_invalid_default(self):
789896
self._deploy()
790897
self.assertRaises(ValueError, commands.set_default, '2.0')

0 commit comments

Comments
 (0)