forked from platformio/platformio-core
Keep user changes for ".gitignore" file when re-generate/update project data
This commit is contained in:
@ -11,6 +11,7 @@ PlatformIO 2.0
|
|||||||
(from EEMEM directive)
|
(from EEMEM directive)
|
||||||
* Improved project generator for `CLion IDE <http://docs.platformio.org/en/latest/ide/clion.html>`__
|
* Improved project generator for `CLion IDE <http://docs.platformio.org/en/latest/ide/clion.html>`__
|
||||||
* Auto-remove project cache when PlatformIO is upgraded
|
* Auto-remove project cache when PlatformIO is upgraded
|
||||||
|
* Keep user changes for ``.gitignore`` file when re-generate/update project data
|
||||||
* Fixed missed ``--boot`` flag for the firmware uploader for ATSAM3X8E
|
* Fixed missed ``--boot`` flag for the firmware uploader for ATSAM3X8E
|
||||||
Cortex-M3 MCU based boards (Arduino Due, etc)
|
Cortex-M3 MCU based boards (Arduino Due, etc)
|
||||||
(`issue #710 <https://github.com/platformio/platformio/issues/710>`_)
|
(`issue #710 <https://github.com/platformio/platformio/issues/710>`_)
|
||||||
|
@ -16,8 +16,8 @@ import json
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
from os.path import (abspath, basename, expanduser, isdir, join, normpath,
|
from os.path import (abspath, basename, expanduser, isdir, isfile, join,
|
||||||
relpath)
|
normpath, relpath)
|
||||||
|
|
||||||
import bottle
|
import bottle
|
||||||
|
|
||||||
@ -113,16 +113,18 @@ class ProjectGenerator(object):
|
|||||||
return tpls
|
return tpls
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
for _relpath, _path in self.get_tpls():
|
for tpl_relpath, tpl_path in self.get_tpls():
|
||||||
tpl_dir = self.project_dir
|
dst_dir = self.project_dir
|
||||||
if _relpath:
|
if tpl_relpath:
|
||||||
tpl_dir = join(self.project_dir, _relpath)
|
dst_dir = join(self.project_dir, tpl_relpath)
|
||||||
if not isdir(tpl_dir):
|
if not isdir(dst_dir):
|
||||||
os.makedirs(tpl_dir)
|
os.makedirs(dst_dir)
|
||||||
|
|
||||||
file_name = basename(_path)[:-4]
|
file_name = basename(tpl_path)[:-4]
|
||||||
with open(join(tpl_dir, file_name), "w") as f:
|
self._merge_contents(
|
||||||
f.write(self._render_tpl(_path).encode("utf8"))
|
join(dst_dir, file_name),
|
||||||
|
self._render_tpl(tpl_path).encode("utf8")
|
||||||
|
)
|
||||||
|
|
||||||
def _render_tpl(self, tpl_path):
|
def _render_tpl(self, tpl_path):
|
||||||
content = ""
|
content = ""
|
||||||
@ -130,6 +132,22 @@ class ProjectGenerator(object):
|
|||||||
content = f.read()
|
content = f.read()
|
||||||
return bottle.template(content, **self._tplvars)
|
return bottle.template(content, **self._tplvars)
|
||||||
|
|
||||||
|
def _merge_contents(self, dst_path, contents):
|
||||||
|
file_name = basename(dst_path)
|
||||||
|
|
||||||
|
# merge .gitignore
|
||||||
|
if file_name == ".gitignore" and isfile(dst_path):
|
||||||
|
contents = [l.strip() for l in contents.split("\n") if l.strip()]
|
||||||
|
with open(dst_path) as f:
|
||||||
|
for line in f.readlines():
|
||||||
|
line = line.strip()
|
||||||
|
if line and line not in contents:
|
||||||
|
contents.append(line)
|
||||||
|
contents = "\n".join(contents)
|
||||||
|
|
||||||
|
with open(dst_path, "w") as f:
|
||||||
|
f.write(contents)
|
||||||
|
|
||||||
def _gather_tplvars(self):
|
def _gather_tplvars(self):
|
||||||
self._tplvars.update(self.get_project_env())
|
self._tplvars.update(self.get_project_env())
|
||||||
self._tplvars.update(self.get_project_build_data())
|
self._tplvars.update(self.get_project_build_data())
|
||||||
|
Reference in New Issue
Block a user