Don't remove missing optional files
This commit is contained in:
parent
0f0cf18f92
commit
697e177e13
4 changed files with 18 additions and 5 deletions
|
@ -106,6 +106,7 @@ class Config(object):
|
||||||
action.add_argument('privatekey', help='Private key (default: ask on execute)', nargs='?')
|
action.add_argument('privatekey', help='Private key (default: ask on execute)', nargs='?')
|
||||||
action.add_argument('--inner_path', help='File you want to sign (default: content.json)',
|
action.add_argument('--inner_path', help='File you want to sign (default: content.json)',
|
||||||
default="content.json", metavar="inner_path")
|
default="content.json", metavar="inner_path")
|
||||||
|
action.add_argument('--remove_missing_optional', help='Remove optional files that is not present in the directory', action='store_true')
|
||||||
action.add_argument('--publish', help='Publish site after the signing', action='store_true')
|
action.add_argument('--publish', help='Publish site after the signing', action='store_true')
|
||||||
|
|
||||||
# SitePublish
|
# SitePublish
|
||||||
|
|
|
@ -491,7 +491,7 @@ class ContentManager(object):
|
||||||
|
|
||||||
# Create and sign a content.json
|
# Create and sign a content.json
|
||||||
# Return: The new content if filewrite = False
|
# Return: The new content if filewrite = False
|
||||||
def sign(self, inner_path="content.json", privatekey=None, filewrite=True, update_changed_files=False, extend=None):
|
def sign(self, inner_path="content.json", privatekey=None, filewrite=True, update_changed_files=False, extend=None, remove_missing_optional=False):
|
||||||
if inner_path in self.contents:
|
if inner_path in self.contents:
|
||||||
content = self.contents[inner_path]
|
content = self.contents[inner_path]
|
||||||
if self.contents[inner_path].get("cert_sign", False) is None and self.site.storage.isFile(inner_path):
|
if self.contents[inner_path].get("cert_sign", False) is None and self.site.storage.isFile(inner_path):
|
||||||
|
@ -523,6 +523,11 @@ class ContentManager(object):
|
||||||
helper.getDirname(inner_path), content.get("ignore"), content.get("optional")
|
helper.getDirname(inner_path), content.get("ignore"), content.get("optional")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if not remove_missing_optional:
|
||||||
|
for file_inner_path, file_details in content.get("files_optional", {}).iteritems():
|
||||||
|
if file_inner_path not in files_optional_node:
|
||||||
|
files_optional_node[file_inner_path] = file_details
|
||||||
|
|
||||||
# Find changed files
|
# Find changed files
|
||||||
files_merged = files_node.copy()
|
files_merged = files_node.copy()
|
||||||
files_merged.update(files_optional_node)
|
files_merged.update(files_optional_node)
|
||||||
|
|
|
@ -287,7 +287,7 @@ class UiWebsocket(object):
|
||||||
self.response(to, ret)
|
self.response(to, ret)
|
||||||
|
|
||||||
# Sign content.json
|
# Sign content.json
|
||||||
def actionSiteSign(self, to, privatekey=None, inner_path="content.json", response_ok=True, update_changed_files=False):
|
def actionSiteSign(self, to, privatekey=None, inner_path="content.json", response_ok=True, update_changed_files=False, remove_missing_optional=False):
|
||||||
self.log.debug("Signing: %s" % inner_path)
|
self.log.debug("Signing: %s" % inner_path)
|
||||||
site = self.site
|
site = self.site
|
||||||
extend = {} # Extended info for signing
|
extend = {} # Extended info for signing
|
||||||
|
@ -320,7 +320,7 @@ class UiWebsocket(object):
|
||||||
# Reload content.json, ignore errors to make it up-to-date
|
# Reload content.json, ignore errors to make it up-to-date
|
||||||
site.content_manager.loadContent(inner_path, add_bad_files=False, force=True)
|
site.content_manager.loadContent(inner_path, add_bad_files=False, force=True)
|
||||||
# Sign using private key sent by user
|
# Sign using private key sent by user
|
||||||
signed = site.content_manager.sign(inner_path, privatekey, extend=extend, update_changed_files=update_changed_files)
|
signed = site.content_manager.sign(inner_path, privatekey, extend=extend, update_changed_files=update_changed_files, remove_missing_optional=remove_missing_optional)
|
||||||
if not signed:
|
if not signed:
|
||||||
self.cmd("notification", ["error", _["Content signing failed"]])
|
self.cmd("notification", ["error", _["Content signing failed"]])
|
||||||
self.response(to, {"error": "Site sign failed"})
|
self.response(to, {"error": "Site sign failed"})
|
||||||
|
@ -469,6 +469,13 @@ class UiWebsocket(object):
|
||||||
):
|
):
|
||||||
return self.response(to, {"error": "Forbidden, you can only modify your own files"})
|
return self.response(to, {"error": "Forbidden, you can only modify your own files"})
|
||||||
|
|
||||||
|
file_info = self.site.content_manager.getFileInfo(inner_path)
|
||||||
|
if file_info.get("optional"):
|
||||||
|
content_json = self.site_storage.loadJson(file_info["content_inner_path"])
|
||||||
|
if inner_path in content_json.get("files_optional", {}):
|
||||||
|
del content_json["files_optional"][inner_path]
|
||||||
|
self.site_storage.writeJson(content_json)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.site.storage.delete(inner_path)
|
self.site.storage.delete(inner_path)
|
||||||
except Exception, err:
|
except Exception, err:
|
||||||
|
|
|
@ -188,7 +188,7 @@ class Actions(object):
|
||||||
|
|
||||||
logging.info("Site created!")
|
logging.info("Site created!")
|
||||||
|
|
||||||
def siteSign(self, address, privatekey=None, inner_path="content.json", publish=False):
|
def siteSign(self, address, privatekey=None, inner_path="content.json", publish=False, remove_missing_optional=False):
|
||||||
from Site import Site
|
from Site import Site
|
||||||
from Site import SiteManager
|
from Site import SiteManager
|
||||||
SiteManager.site_manager.load()
|
SiteManager.site_manager.load()
|
||||||
|
@ -208,7 +208,7 @@ class Actions(object):
|
||||||
import getpass
|
import getpass
|
||||||
privatekey = getpass.getpass("Private key (input hidden):")
|
privatekey = getpass.getpass("Private key (input hidden):")
|
||||||
diffs = site.content_manager.getDiffs(inner_path)
|
diffs = site.content_manager.getDiffs(inner_path)
|
||||||
succ = site.content_manager.sign(inner_path=inner_path, privatekey=privatekey, update_changed_files=True)
|
succ = site.content_manager.sign(inner_path=inner_path, privatekey=privatekey, update_changed_files=True, remove_missing_optional=remove_missing_optional)
|
||||||
if succ and publish:
|
if succ and publish:
|
||||||
self.sitePublish(address, inner_path=inner_path, diffs=diffs)
|
self.sitePublish(address, inner_path=inner_path, diffs=diffs)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue