Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
Anas Nashif | 3ae5262 | 2019-04-06 09:08:09 -0400 | [diff] [blame] | 2 | # SPDX-License-Identifier: Apache-2.0 |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 3 | |
| 4 | import os |
| 5 | import argparse |
| 6 | |
| 7 | def touch(trigger): |
| 8 | # If no trigger file is provided then do a return. |
Ulf Magnusson | ba312fe | 2019-03-20 19:30:29 +0100 | [diff] [blame] | 9 | if trigger is None: |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 10 | return |
| 11 | |
| 12 | if os.path.exists(trigger): |
| 13 | os.utime(trigger, None) |
| 14 | else: |
| 15 | with open(trigger, 'w') as fp: |
| 16 | fp.write("") |
| 17 | |
| 18 | |
| 19 | def main(): |
| 20 | parser = argparse.ArgumentParser( |
| 21 | description='This script will walk the specified directory and write the file specified \ |
| 22 | with the list of all sub-directories found. If to the output file already \ |
| 23 | exists, the file will only be updated in case sub-directories has been added \ |
| 24 | or removed since previous invocation.') |
| 25 | |
| 26 | parser.add_argument('-d', '--directory', required=True, |
| 27 | help='Directory to walk for sub-directory discovery') |
Torsten Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 28 | parser.add_argument('-c', '--create-links', required=False, |
| 29 | help='Create links for each directory found in directory given') |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 30 | parser.add_argument('-o', '--out-file', required=True, |
| 31 | help='File to write containing a list of all directories found') |
| 32 | parser.add_argument('-t', '--trigger-file', required=False, |
| 33 | help='Trigger file to be be touched to re-run CMake') |
| 34 | |
| 35 | args = parser.parse_args() |
| 36 | |
| 37 | dirlist = [] |
Ulf Magnusson | ba312fe | 2019-03-20 19:30:29 +0100 | [diff] [blame] | 38 | if args.create_links is not None: |
Torsten Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 39 | if not os.path.exists(args.create_links): |
| 40 | os.makedirs(args.create_links) |
| 41 | directory = args.directory |
| 42 | symlink = args.create_links + os.path.sep + directory.replace(os.path.sep, '_') |
| 43 | if not os.path.exists(symlink): |
| 44 | os.symlink(directory, symlink) |
| 45 | dirlist.extend(symlink) |
| 46 | else: |
| 47 | dirlist.extend(args.directory) |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 48 | dirlist.extend(os.linesep) |
Marc Herbert | d5b2834 | 2019-02-15 18:56:57 -0800 | [diff] [blame] | 49 | for root, dirs, _ in os.walk(args.directory, topdown=True): |
| 50 | dirs.sort() |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 51 | for subdir in dirs: |
Ulf Magnusson | ba312fe | 2019-03-20 19:30:29 +0100 | [diff] [blame] | 52 | if args.create_links is not None: |
Torsten Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 53 | directory = os.path.join(root, subdir) |
| 54 | symlink = args.create_links + os.path.sep + directory.replace(os.path.sep, '_') |
| 55 | if not os.path.exists(symlink): |
| 56 | os.symlink(directory, symlink) |
| 57 | dirlist.extend(symlink) |
| 58 | else: |
| 59 | dirlist.extend(os.path.join(root, subdir)) |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 60 | dirlist.extend(os.linesep) |
| 61 | |
| 62 | new = ''.join(dirlist) |
| 63 | existing = '' |
| 64 | |
| 65 | if os.path.exists(args.out_file): |
Carles Cufi | 3ad1f27 | 2019-07-18 10:38:25 +0200 | [diff] [blame] | 66 | with open(args.out_file, 'r', encoding="utf-8") as fp: |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 67 | existing = fp.read() |
| 68 | |
Torsten Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 69 | if new != existing: |
Carles Cufi | 3ad1f27 | 2019-07-18 10:38:25 +0200 | [diff] [blame] | 70 | with open(args.out_file, 'w', encoding="utf-8") as fp: |
Torsten Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 71 | fp.write(new) |
| 72 | else: |
Carles Cufi | 3ad1f27 | 2019-07-18 10:38:25 +0200 | [diff] [blame] | 73 | with open(args.out_file, 'w', encoding="utf-8") as fp: |
Torsten Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 74 | fp.write(new) |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 75 | |
Torsten Rasmussen | 080e32e | 2018-06-14 22:27:17 +0200 | [diff] [blame] | 76 | # Always touch trigger file to ensure json files are updated |
| 77 | touch(args.trigger_file) |
Torsten Rasmussen | f38e388 | 2018-06-07 15:50:31 +0200 | [diff] [blame] | 78 | |
| 79 | if __name__ == "__main__": |
| 80 | main() |