diff --git a/check-syntax.sh b/check-syntax.sh index d882184..d1daf1e 100755 --- a/check-syntax.sh +++ b/check-syntax.sh @@ -36,14 +36,14 @@ fi echo "=> pyflakes version:" pyflakes --version -echo "---------------------" - # check shell scripts # SC2002: Useless cat # SC2126: Consider using grep -c instead of grep|wc -l # SC2129: Consider using { cmd1; cmd2; } >> file instead of individual redirects # SC2181: Check exit code directly with e.g. 'if mycmd;', not indirectly with $? +echo "--------------------------------------" echo "checking shell scripts with shellcheck" +echo "--------------------------------------" find . -iname '*.sh' | while read -r script; do echo "checking ${script}" shellcheck -x \ @@ -55,7 +55,9 @@ find . -iname '*.sh' | while read -r script; do done # check other python scripts +echo "-----------------------------------------" echo "checking other python scripts with pylint" +echo "-----------------------------------------" find . -name "*.py" -not -path "./dotdrop/*" | while read -r script; do echo "checking ${script}" pylint -sn \ @@ -68,16 +70,22 @@ done # PEP8 tests # W503: Line break occurred before a binary operator # W504: Line break occurred after a binary operator +echo "---------------------------------" echo "checking dotdrop with pycodestyle" +echo "---------------------------------" pycodestyle --ignore=W503,W504 dotdrop/ pycodestyle scripts/ # pyflakes tests +echo "------------------------------" echo "checking dotdrop with pyflakes" +echo "------------------------------" pyflakes dotdrop/ # pylint +echo "----------------------------" echo "checking dotdrop with pylint" +echo "----------------------------" # https://pylint.pycqa.org/en/latest/user_guide/checkers/features.html # R0902: too-many-instance-attributes # R0913: too-many-arguments @@ -98,6 +106,9 @@ pylint \ --disable=R0904 \ dotdrop/ +echo "------------------------" +echo "checking for more issues" +echo "------------------------" set +e exceptions="save_uservariables_name\|@@\|diff_cmd\|original,\|modified," # f-string errors and missing f literal diff --git a/scripts/check_links.py b/scripts/check_links.py index ba6799b..b396558 100755 --- a/scripts/check_links.py +++ b/scripts/check_links.py @@ -61,6 +61,11 @@ def check_links(urls): allow_redirects=True, headers=HEADERS).status_code if ret not in VALID_RET: + msg = ( + f' [WARN] HEAD {url} returned {ret}' + f' ... checking with GET' + ) + print(msg) verb = 'get' ret = requests.get(url, timeout=TIMEOUT, diff --git a/tests/test_update.py b/tests/test_update.py index a9f102c..ffaaf62 100644 --- a/tests/test_update.py +++ b/tests/test_update.py @@ -17,6 +17,7 @@ from tests.helpers import create_dir, get_string, get_tempdir, clean, \ class TestUpdate(unittest.TestCase): + """unit test""" CONFIG_BACKUP = False CONFIG_CREATE = True @@ -46,16 +47,16 @@ class TestUpdate(unittest.TestCase): self.addCleanup(clean, dotfilespath) # create the dotfiles to test - d1, c1 = create_random_file(fold_config) + d1, _ = create_random_file(fold_config) self.assertTrue(os.path.exists(d1)) self.addCleanup(clean, d1) - d2, c2 = create_random_file(fold_config) + d2, _ = create_random_file(fold_config) self.assertTrue(os.path.exists(d2)) self.addCleanup(clean, d2) # template - d3t, c3t = create_random_file(fold_config) + d3t, _ = create_random_file(fold_config) self.assertTrue(os.path.exists(d3t)) self.addCleanup(clean, d3t) @@ -74,9 +75,9 @@ class TestUpdate(unittest.TestCase): dir1sub2str = 'sub2' sub2 = os.path.join(dir1, dir1sub2str) create_dir(sub2) - f1s1, f1s1c1 = create_random_file(sub1) + f1s1, _ = create_random_file(sub1) self.assertTrue(os.path.exists(f1s1)) - f1s2, f1s2c1 = create_random_file(sub2) + f1s2, _ = create_random_file(sub2) self.assertTrue(os.path.exists(f1s2)) # create the directory to test @@ -93,38 +94,38 @@ class TestUpdate(unittest.TestCase): backup=self.CONFIG_BACKUP, create=self.CONFIG_CREATE) self.assertTrue(os.path.exists(confpath)) - o = load_options(confpath, profile) - o.update_showpatch = True + opt = load_options(confpath, profile) + opt.update_showpatch = True dfiles = [d1, dir1, d2, d3t, dsubstmp] # import the files - o.import_path = dfiles - cmd_importer(o) + opt.import_path = dfiles + cmd_importer(opt) # get new config - o = load_options(confpath, profile) - o.safe = False - o.update_showpatch = True - o.debug = True + opt = load_options(confpath, profile) + opt.safe = False + opt.update_showpatch = True + opt.debug = True trans = Transform('trans', 'cp -r {0} {1}') d3tb = os.path.basename(d3t) - for dotfile in o.dotfiles: + for dotfile in opt.dotfiles: if os.path.basename(dotfile.dst) == d3tb: # patch the template - src = os.path.join(o.dotpath, dotfile.src) + src = os.path.join(opt.dotpath, dotfile.src) src = os.path.expanduser(src) edit_content(src, '{{@@ profile @@}}') left = os.path.realpath(os.path.basename(dotfile.dst)) right = os.path.realpath(dirsubs) if left == right: # retrieve the path of the sub in the dotpath - d1indotpath = os.path.join(o.dotpath, dotfile.src) + d1indotpath = os.path.join(opt.dotpath, dotfile.src) d1indotpath = os.path.expanduser(d1indotpath) dotfile.trans_w = trans # update template - o.update_path = [d3t] - self.assertFalse(cmd_update(o)) + opt.update_path = [d3t] + self.assertFalse(cmd_update(opt)) # update sub dirs gone = os.path.join(d1indotpath, dir1string) @@ -132,8 +133,8 @@ class TestUpdate(unittest.TestCase): self.assertTrue(os.path.exists(gone)) clean(sub1) # dir1sub1str self.assertTrue(os.path.exists(gone)) - o.update_path = [dsubstmp] - cmd_update(o) + opt.update_path = [dsubstmp] + cmd_update(opt) self.assertFalse(os.path.exists(gone)) # edit the files @@ -141,7 +142,7 @@ class TestUpdate(unittest.TestCase): edit_content(dirf1, 'newcontent') # add more file - dirf2, _ = create_random_file(dpath) + _, _ = create_random_file(dpath) # add more dirs dpath = os.path.join(dpath, get_string(5)) @@ -149,36 +150,43 @@ class TestUpdate(unittest.TestCase): create_random_file(dpath) # update it - o.update_path = [d1, dir1] - cmd_update(o) + opt.update_path = [d1, dir1] + cmd_update(opt) # test content - newcontent = open(d1, 'r').read() + newcontent = '' + with open(d1, 'r', encoding='utf-8') as file: + newcontent = file.read() self.assertTrue(newcontent == 'newcontent') - newcontent = open(dirf1, 'r').read() + newcontent = '' + with open(dirf1, 'r', encoding='utf-8') as file: + newcontent = file.read() self.assertTrue(newcontent == 'newcontent') edit_content(d2, 'newcontentbykey') # update it by key - dfiles = o.dotfiles + dfiles = opt.dotfiles d2key = '' - for ds in dfiles: - t = os.path.expanduser(ds.dst) - if t == d2: - d2key = ds.key + for dotfile in dfiles: + src = os.path.expanduser(dotfile.dst) + if src == d2: + d2key = dotfile.key break self.assertTrue(d2key != '') - o.update_path = [d2key] - o.update_iskey = True - cmd_update(o) + opt.update_path = [d2key] + opt.update_iskey = True + cmd_update(opt) # test content - newcontent = open(d2, 'r').read() + newcontent = '' + with open(d2, 'r', encoding='utf-8') as file: + newcontent = file.read() self.assertTrue(newcontent == 'newcontentbykey') def main(): + """entry point""" unittest.main()