diff --git a/src/Config.py b/src/Config.py index 6610cbcb..72e848e4 100644 --- a/src/Config.py +++ b/src/Config.py @@ -8,7 +8,7 @@ class Config(object): def __init__(self, argv): self.version = "0.3.2" - self.rev = 536 + self.rev = 542 self.argv = argv self.action = None self.createParser() diff --git a/src/Content/ContentManager.py b/src/Content/ContentManager.py index bba537c1..c9a68921 100644 --- a/src/Content/ContentManager.py +++ b/src/Content/ContentManager.py @@ -287,6 +287,7 @@ class ContentManager(object): if optional: self.log.info("- [OPTIONAL] %s (SHA512: %s)" % (file_relative_path, sha512sum)) files_optional_node[file_relative_path] = {"sha512": sha512sum, "size": os.path.getsize(file_path)} + self.hashfield.appendHash(sha512sum) else: self.log.info("- %s (SHA512: %s)" % (file_relative_path, sha512sum)) files_node[file_relative_path] = {"sha512": sha512sum, "size": os.path.getsize(file_path)} diff --git a/src/Site/Site.py b/src/Site/Site.py index 19c0a8bf..2e1dd8dd 100644 --- a/src/Site/Site.py +++ b/src/Site/Site.py @@ -234,6 +234,10 @@ class Site: updaters.append(gevent.spawn(self.updater, peers_try, queried, since)) gevent.joinall(updaters, timeout=10) # Wait 10 sec to workers done query modifications + if not queried: + gevent.joinall(updaters, timeout=10) # Wait another 10 sec if none of updaters finished + + time.sleep(0.1) self.log.debug("Queried listModifications from: %s" % queried) return queried @@ -360,6 +364,9 @@ class Site: for peer in passive_peers: gevent.spawn(self.publisher, inner_path, passive_peers, published, limit=10) + # Send my hashfield to every connected peer if changed + gevent.spawn(self.sendMyHashfield, 100) + return len(published) # Copy this site @@ -744,8 +751,10 @@ class Site: if peer.sendMyHashfield(): num_sent += 1 if num_sent >= num_send: - return True - return False + break + if num_sent: + self.log.debug("Sent my hashfield to %s peers" % num_sent) + return num_sent # - Events - diff --git a/src/Test/TestContent.py b/src/Test/TestContent.py index 5303287e..232439b0 100644 --- a/src/Test/TestContent.py +++ b/src/Test/TestContent.py @@ -102,14 +102,18 @@ class TestContent: ) def testSignOptionalFiles(self, site): + assert len(site.content_manager.hashfield) == 0 + site.content_manager.contents["content.json"]["optional"] = "((data/img/zero.*))" content_optional = site.content_manager.sign(privatekey="5KUh3PvNm5HUWoCfSUfcYvfQ2g3PrRNJWr6Q9eqdBGu23mtMntv", filewrite=False) + del site.content_manager.contents["content.json"]["optional"] content_nooptional = site.content_manager.sign(privatekey="5KUh3PvNm5HUWoCfSUfcYvfQ2g3PrRNJWr6Q9eqdBGu23mtMntv", filewrite=False) - assert len(content_nooptional.get("files_optional", {})) == 0 + assert len(content_nooptional.get("files_optional", {})) == 0 # No optional files if no pattern assert len(content_optional["files_optional"]) > 0 + assert len(site.content_manager.hashfield) == len(content_optional["files_optional"]) # Hashed optional files should be added to hashfield assert len(content_nooptional["files"]) > len(content_optional["files"]) def testFileInfo(self, site):