blob: a85c82a166d945619883840edeabaab1d91ad7ae [file] [log] [blame]
Anthony Sottile8f615292022-01-15 19:24:05 -05001from __future__ import annotations
2
Benjamin Chess896c0cf2016-01-14 15:25:46 -08003import argparse
Benjamin Chess896c0cf2016-01-14 15:25:46 -08004import os.path
Anthony Sottile030bfac2019-01-31 19:19:10 -08005from typing import Sequence
Benjamin Chess896c0cf2016-01-14 15:25:46 -08006
7
Anthony Sottile8f615292022-01-15 19:24:05 -05008def main(argv: Sequence[str] | None = None) -> int:
Benjamin Chess896c0cf2016-01-14 15:25:46 -08009 parser = argparse.ArgumentParser(description='Checks for broken symlinks.')
10 parser.add_argument('filenames', nargs='*', help='Filenames to check')
11 args = parser.parse_args(argv)
12
13 retv = 0
14
15 for filename in args.filenames:
Anthony Sottile8d80d512016-01-15 07:41:58 -080016 if (
17 os.path.islink(filename) and
18 not os.path.exists(filename)
Anthony Sottiled740fae2016-02-03 11:12:51 -080019 ): # pragma: no cover (symlink support required)
Anthony Sottilef5c42a02020-02-05 11:10:42 -080020 print(f'{filename}: Broken symlink')
Benjamin Chess896c0cf2016-01-14 15:25:46 -080021 retv = 1
22
23 return retv
24
25
26if __name__ == '__main__':
Anthony Sottile39ab2ed2021-10-23 13:23:50 -040027 raise SystemExit(main())