comparison piecrust/commands/builtin/themes.py @ 891:f13d618cfec6

themes: Allow keeping local overrides when copying a theme locally.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 02 Jul 2017 22:19:58 -0700
parents 58ae026b4c31
children 727110ea112a
comparison
equal deleted inserted replaced
890:f77f9dcba072 891:f13d618cfec6
101 continue 101 continue
102 src_path = os.path.join(dirpath, name) 102 src_path = os.path.join(dirpath, name)
103 dst_path = os.path.join(app_dir, rel_dirpath, name) 103 dst_path = os.path.join(app_dir, rel_dirpath, name)
104 copies.append((src_path, dst_path)) 104 copies.append((src_path, dst_path))
105 105
106 conflicts = [] 106 conflicts = set()
107 for c in copies: 107 for c in copies:
108 if os.path.exists(c[1]): 108 if os.path.exists(c[1]):
109 conflicts.append(c[1]) 109 conflicts.add(c[1])
110 if conflicts: 110 if conflicts:
111 logger.warning("Some website files will be overwritten:") 111 logger.warning("Some website files override theme files:")
112 for c in conflicts: 112 for c in conflicts:
113 logger.warning(os.path.relpath(c, app_dir)) 113 logger.warning(os.path.relpath(c, app_dir))
114 logger.warning("Are you sure? [Y/n]") 114 logger.warning("")
115 ans = input() 115 logger.warning("The local website files will be preserved, and "
116 if len(ans) > 0 and ans.lower() not in ['y', 'yes']: 116 "the conflicting theme files won't be copied "
117 return 1 117 "locally.")
118 118
119 for c in copies: 119 for c in copies:
120 logger.info(os.path.relpath(c[1], app_dir)) 120 if not c[1] in conflicts:
121 if not os.path.exists(os.path.dirname(c[1])): 121 logger.info(os.path.relpath(c[1], app_dir))
122 os.makedirs(os.path.dirname(c[1])) 122 os.makedirs(os.path.dirname(c[1]), exist_ok=True)
123 shutil.copy2(c[0], c[1]) 123 shutil.copy2(c[0], c[1])
124 124
125 def _linkTheme(self, ctx): 125 def _linkTheme(self, ctx):
126 if not os.path.isdir(ctx.args.theme_dir): 126 if not os.path.isdir(ctx.args.theme_dir):
127 logger.error("Invalid theme directory: %s" % ctx.args.theme_dir) 127 logger.error("Invalid theme directory: %s" % ctx.args.theme_dir)
128 return 1 128 return 1