diff --git a/test/test_unit_remove_stale_links.py b/test/test_unit_remove_stale_links.py new file mode 100644 index 0000000..0bd960b --- /dev/null +++ b/test/test_unit_remove_stale_links.py @@ -0,0 +1,37 @@ +"""Unit tests: remove_stale_links""" +import os +import pytest + + +@pytest.mark.parametrize('linked', [True, False]) +@pytest.mark.parametrize('kind', ['file', 'symlink']) +def test_remove_stale_links(runner, yadm, tmpdir, kind, linked): + """Test remove_stale_links()""" + + source_file = tmpdir.join('source_file') + source_file.write('source file', ensure=True) + link = tmpdir.join('link') + + if kind == 'file': + link.write('link file', ensure=True) + else: + os.system(f'ln -s {source_file} {link}') + + alt_linked = '' + if linked: + alt_linked = source_file + + script = f""" + YADM_TEST=1 source {yadm} + possible_alts=({link}) + alt_linked=({alt_linked}) + function rm() {{ echo rm "$@"; }} + remove_stale_links + """ + + run = runner(command=['bash'], inp=script) + assert run.err == '' + if kind == 'symlink' and not linked: + assert f'rm -f {link}' in run.out + else: + assert run.out == '' diff --git a/yadm b/yadm index ea4ee63..a3f9893 100755 --- a/yadm +++ b/yadm @@ -402,6 +402,11 @@ function alt() { alt_future_linking fi + remove_stale_links + +} + +function remove_stale_links() { # review alternate candidates for stale links # if a possible alt IS linked, but it's target is not part of alt_linked, # remove it. @@ -419,7 +424,6 @@ function alt() { fi done fi - } function set_local_alt_values() {