Mercurial > vim-crosoft
diff scripts/list_sln_projects.py @ 0:5d2c0db51914
Initial commit
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 17 Sep 2019 13:24:24 -0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/list_sln_projects.py Tue Sep 17 13:24:24 2019 -0700 @@ -0,0 +1,58 @@ +import argparse +import logging +from logutil import setup_logging +from vsutil import SolutionCache + + +logger = logging.getLogger(__name__) + + +def main(args=None): + parser = argparse.ArgumentParser() + parser.add_argument('solution', + help="The path to the Visual Studio solution file.") + parser.add_argument('-c', '--cache', + help="The path to the solution cache.") + parser.add_argument('-f', '--full-names', + action='store_true', + help="Print full names for nested projects.") + parser.add_argument('-v', '--verbose', + action='store_true', + help="Show verbose information.") + args = parser.parse_args(args) + setup_logging(args.verbose) + + cache, _ = SolutionCache.load_or_rebuild(args.solution, args.cache) + slnobj = cache.slnobj + logger.debug("Found {0} projects:".format(len(slnobj.projects))) + + non_folder_projs = list(filter(lambda p: not p.is_folder, + slnobj.projects)) + if args.full_names: + parenting = {} + nesting_sec = slnobj.globalsection("NestedProjects") + if nesting_sec: + for entry in nesting_sec.entries: + child_guid, parent_guid = (entry.name.strip('{}'), + entry.value.strip('{}')) + child = slnobj.find_project_by_guid(child_guid, False) + parent = slnobj.find_project_by_guid(parent_guid, False) + parenting[child] = parent + + for p in non_folder_projs: + full_name = p.name + cur_p = p + while True: + cur_p = parenting.get(cur_p) + if not cur_p: + break + full_name = cur_p.name + "\\" + full_name + print(full_name) + else: + for p in non_folder_projs: + print(p.name) + + +if __name__ == '__main__': + main() +