Change yadm.cygwin-copy to yadm.alt-copy
This removes the constraint of only allowing the copy option on Cygwin systems. Now any system can configure this option.
This commit is contained in:
parent
b2ef6d2e09
commit
574945f010
5 changed files with 81 additions and 92 deletions
|
@ -63,12 +63,6 @@ def tst_sys():
|
||||||
return platform.system()
|
return platform.system()
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='session')
|
|
||||||
def cygwin_sys():
|
|
||||||
"""CYGWIN uname id"""
|
|
||||||
return 'CYGWIN_NT-6.1-WOW64'
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='session')
|
@pytest.fixture(scope='session')
|
||||||
def supported_commands():
|
def supported_commands():
|
||||||
"""List of supported commands
|
"""List of supported commands
|
||||||
|
@ -105,10 +99,10 @@ def supported_configs():
|
||||||
'local.hostname',
|
'local.hostname',
|
||||||
'local.os',
|
'local.os',
|
||||||
'local.user',
|
'local.user',
|
||||||
|
'yadm.alt-copy',
|
||||||
'yadm.auto-alt',
|
'yadm.auto-alt',
|
||||||
'yadm.auto-perms',
|
'yadm.auto-perms',
|
||||||
'yadm.auto-private-dirs',
|
'yadm.auto-private-dirs',
|
||||||
'yadm.cygwin-copy',
|
|
||||||
'yadm.git-program',
|
'yadm.git-program',
|
||||||
'yadm.gpg-perms',
|
'yadm.gpg-perms',
|
||||||
'yadm.gpg-program',
|
'yadm.gpg-program',
|
||||||
|
@ -444,7 +438,7 @@ class DataSet():
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='session')
|
@pytest.fixture(scope='session')
|
||||||
def ds1_dset(tst_sys, cygwin_sys):
|
def ds1_dset(tst_sys):
|
||||||
"""Meta-data for dataset one files"""
|
"""Meta-data for dataset one files"""
|
||||||
dset = DataSet()
|
dset = DataSet()
|
||||||
dset.add_file('t1')
|
dset.add_file('t1')
|
||||||
|
@ -457,10 +451,8 @@ def ds1_dset(tst_sys, cygwin_sys):
|
||||||
dset.add_file(f'test alt/test alt##S.H')
|
dset.add_file(f'test alt/test alt##S.H')
|
||||||
dset.add_file(f'test alt/test alt##S.H.U')
|
dset.add_file(f'test alt/test alt##S.H.U')
|
||||||
dset.add_file(f'test alt/test alt##C.S.H.U')
|
dset.add_file(f'test alt/test alt##C.S.H.U')
|
||||||
dset.add_file(f'test_cygwin_copy##{tst_sys}')
|
dset.add_file(f'test_alt_copy##{tst_sys}')
|
||||||
dset.add_file(f'test_cygwin_copy##{cygwin_sys}')
|
dset.add_file(f'test_alt_copy##os.{tst_sys}')
|
||||||
dset.add_file(f'test_cygwin_copy##os.{tst_sys}')
|
|
||||||
dset.add_file(f'test_cygwin_copy##os.{cygwin_sys}')
|
|
||||||
dset.add_file('u1', tracked=False)
|
dset.add_file('u1', tracked=False)
|
||||||
dset.add_file('d2/u2', tracked=False)
|
dset.add_file('d2/u2', tracked=False)
|
||||||
dset.add_file('.ssh/p1', tracked=False, private=True)
|
dset.add_file('.ssh/p1', tracked=False, private=True)
|
||||||
|
|
61
test/test_alt_copy.py
Normal file
61
test/test_alt_copy.py
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
"""Test yadm.alt-copy"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'cygwin',
|
||||||
|
[pytest.param(True, marks=pytest.mark.deprecated), False],
|
||||||
|
ids=['cygwin', 'no-cygwin'])
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'compatibility', [True, False], ids=['compat', 'no-compat'])
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'setting, expect_link, pre_existing', [
|
||||||
|
(None, True, None),
|
||||||
|
(True, False, None),
|
||||||
|
(False, True, None),
|
||||||
|
(True, False, 'link'),
|
||||||
|
(True, False, 'file'),
|
||||||
|
],
|
||||||
|
ids=[
|
||||||
|
'unset',
|
||||||
|
'true',
|
||||||
|
'false',
|
||||||
|
'pre-existing symlink',
|
||||||
|
'pre-existing file',
|
||||||
|
])
|
||||||
|
@pytest.mark.usefixtures('ds1_copy')
|
||||||
|
def test_alt_copy(
|
||||||
|
runner, yadm_y, paths, tst_sys,
|
||||||
|
setting, expect_link, pre_existing,
|
||||||
|
compatibility, cygwin):
|
||||||
|
"""Test yadm.alt-copy"""
|
||||||
|
|
||||||
|
option = 'yadm.cygwin-copy' if cygwin else 'yadm.alt-copy'
|
||||||
|
|
||||||
|
if setting is not None:
|
||||||
|
os.system(' '.join(yadm_y('config', option, str(setting))))
|
||||||
|
|
||||||
|
if compatibility:
|
||||||
|
expected_content = f'test_alt_copy##{tst_sys}'
|
||||||
|
else:
|
||||||
|
expected_content = f'test_alt_copy##os.{tst_sys}'
|
||||||
|
|
||||||
|
alt_path = paths.work.join('test_alt_copy')
|
||||||
|
if pre_existing == 'symlink':
|
||||||
|
alt_path.mklinkto(expected_content)
|
||||||
|
elif pre_existing == 'file':
|
||||||
|
alt_path.write('wrong content')
|
||||||
|
|
||||||
|
env = os.environ.copy()
|
||||||
|
if compatibility:
|
||||||
|
env['YADM_COMPATIBILITY'] = '1'
|
||||||
|
|
||||||
|
run = runner(yadm_y('alt'), env=env)
|
||||||
|
assert run.success
|
||||||
|
assert run.err == ''
|
||||||
|
assert 'Linking' in run.out
|
||||||
|
|
||||||
|
assert alt_path.read() == expected_content
|
||||||
|
assert alt_path.islink() == expect_link
|
|
@ -1,71 +0,0 @@
|
||||||
"""Test yadm.cygwin_copy"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
import pytest
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
'compatibility', [True, False], ids=['compat', 'no-compat'])
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
'setting, is_cygwin, expect_link, pre_existing', [
|
|
||||||
(None, False, True, None),
|
|
||||||
(True, False, True, None),
|
|
||||||
(False, False, True, None),
|
|
||||||
(None, True, True, None),
|
|
||||||
(True, True, False, None),
|
|
||||||
(False, True, True, None),
|
|
||||||
(True, True, False, 'link'),
|
|
||||||
(True, True, False, 'file'),
|
|
||||||
],
|
|
||||||
ids=[
|
|
||||||
'unset, non-cygwin',
|
|
||||||
'true, non-cygwin',
|
|
||||||
'false, non-cygwin',
|
|
||||||
'unset, cygwin',
|
|
||||||
'true, cygwin',
|
|
||||||
'false, cygwin',
|
|
||||||
'pre-existing symlink',
|
|
||||||
'pre-existing file',
|
|
||||||
])
|
|
||||||
@pytest.mark.usefixtures('ds1_copy')
|
|
||||||
def test_cygwin_copy(
|
|
||||||
runner, yadm_y, paths, cygwin_sys, tst_sys,
|
|
||||||
setting, is_cygwin, expect_link, pre_existing,
|
|
||||||
compatibility):
|
|
||||||
"""Test yadm.cygwin_copy"""
|
|
||||||
|
|
||||||
if setting is not None:
|
|
||||||
os.system(' '.join(yadm_y('config', 'yadm.cygwin-copy', str(setting))))
|
|
||||||
|
|
||||||
if compatibility:
|
|
||||||
expected_content = f'test_cygwin_copy##{tst_sys}'
|
|
||||||
else:
|
|
||||||
expected_content = f'test_cygwin_copy##os.{tst_sys}'
|
|
||||||
|
|
||||||
alt_path = paths.work.join('test_cygwin_copy')
|
|
||||||
if pre_existing == 'symlink':
|
|
||||||
alt_path.mklinkto(expected_content)
|
|
||||||
elif pre_existing == 'file':
|
|
||||||
alt_path.write('wrong content')
|
|
||||||
|
|
||||||
uname_path = paths.root.join('tmp').mkdir()
|
|
||||||
if is_cygwin:
|
|
||||||
uname = uname_path.join('uname')
|
|
||||||
uname.write(f'#!/bin/sh\necho "{cygwin_sys}"\n')
|
|
||||||
uname.chmod(0o777)
|
|
||||||
if compatibility:
|
|
||||||
expected_content = f'test_cygwin_copy##{cygwin_sys}'
|
|
||||||
else:
|
|
||||||
expected_content = f'test_cygwin_copy##os.{cygwin_sys}'
|
|
||||||
env = os.environ.copy()
|
|
||||||
env['PATH'] = ':'.join([str(uname_path), env['PATH']])
|
|
||||||
if compatibility:
|
|
||||||
env['YADM_COMPATIBILITY'] = '1'
|
|
||||||
|
|
||||||
run = runner(yadm_y('alt'), env=env)
|
|
||||||
assert run.success
|
|
||||||
assert run.err == ''
|
|
||||||
assert 'Linking' in run.out
|
|
||||||
|
|
||||||
assert alt_path.read() == expected_content
|
|
||||||
assert alt_path.islink() == expect_link
|
|
9
yadm
9
yadm
|
@ -389,9 +389,10 @@ function alt() {
|
||||||
|
|
||||||
# decide if a copy should be done instead of a symbolic link
|
# decide if a copy should be done instead of a symbolic link
|
||||||
local do_copy=0
|
local do_copy=0
|
||||||
[[ $OPERATING_SYSTEM =~ ^(CYGWIN|MSYS) ]] &&
|
[ "$(config --bool yadm.alt-copy)" == "true" ] && do_copy=1
|
||||||
[ "$(config --bool yadm.cygwin-copy)" == "true" ] &&
|
|
||||||
do_copy=1
|
# deprecated yadm.cygwin-copy option (to be removed)
|
||||||
|
[ "$(config --bool yadm.cygwin-copy)" == "true" ] && do_copy=1
|
||||||
|
|
||||||
cd_work "Alternates" || return
|
cd_work "Alternates" || return
|
||||||
|
|
||||||
|
@ -966,10 +967,10 @@ local.class
|
||||||
local.hostname
|
local.hostname
|
||||||
local.os
|
local.os
|
||||||
local.user
|
local.user
|
||||||
|
yadm.alt-copy
|
||||||
yadm.auto-alt
|
yadm.auto-alt
|
||||||
yadm.auto-perms
|
yadm.auto-perms
|
||||||
yadm.auto-private-dirs
|
yadm.auto-private-dirs
|
||||||
yadm.cygwin-copy
|
|
||||||
yadm.git-program
|
yadm.git-program
|
||||||
yadm.gpg-perms
|
yadm.gpg-perms
|
||||||
yadm.gpg-program
|
yadm.gpg-program
|
||||||
|
|
16
yadm.1
16
yadm.1
|
@ -331,6 +331,17 @@ yadm config yadm.auto-alt false
|
||||||
|
|
||||||
The following is the full list of supported configurations:
|
The following is the full list of supported configurations:
|
||||||
.TP
|
.TP
|
||||||
|
.B yadm.alt-copy
|
||||||
|
If set to "true", alternate files will be copies instead of symbolic links.
|
||||||
|
This might be desirable, because some systems may not properly support
|
||||||
|
symlinks.
|
||||||
|
|
||||||
|
NOTE: The deprecated
|
||||||
|
.I yadm.cygwin-copy
|
||||||
|
option used by older versions of yadm has been replaced by
|
||||||
|
.IR yadm.alt-copy .
|
||||||
|
The old option will be removed in the next version of yadm.
|
||||||
|
.TP
|
||||||
.B yadm.auto-alt
|
.B yadm.auto-alt
|
||||||
Disable the automatic linking described in the section ALTERNATES. If disabled,
|
Disable the automatic linking described in the section ALTERNATES. If disabled,
|
||||||
you may still run "yadm alt" manually to create the alternate links. This
|
you may still run "yadm alt" manually to create the alternate links. This
|
||||||
|
@ -372,11 +383,6 @@ By default, the first "gpg" found in $PATH is used.
|
||||||
.B yadm.git-program
|
.B yadm.git-program
|
||||||
Specify an alternate program to use instead of "git".
|
Specify an alternate program to use instead of "git".
|
||||||
By default, the first "git" found in $PATH is used.
|
By default, the first "git" found in $PATH is used.
|
||||||
.TP
|
|
||||||
.B yadm.cygwin-copy
|
|
||||||
If set to "true", for Cygwin hosts, alternate files will be copies instead of
|
|
||||||
symbolic links. This might be desirable, because non-Cygwin software may not
|
|
||||||
properly interpret Cygwin symlinks.
|
|
||||||
|
|
||||||
.RE
|
.RE
|
||||||
The following four "local" configurations are not stored in the
|
The following four "local" configurations are not stored in the
|
||||||
|
|
Loading…
Reference in a new issue