re-insert fixes.
diff --git a/infocalypse/bundlecache.py b/infocalypse/bundlecache.py
--- a/infocalypse/bundlecache.py
+++ b/infocalypse/bundlecache.py
@@ -51,6 +51,11 @@ def is_writable(dir_name):
os.remove(tmp_file)
+class BundleException(Exception):
+ """ An Exception for problems encountered with bundles."""
+ def __init__(self, msg):
+ Exception.__init__(self, msg)
+
class BundleCache:
""" Class to create hg bundle files and cache information about
their sizes. """
diff --git a/infocalypse/insertingbundles.py b/infocalypse/insertingbundles.py
--- a/infocalypse/insertingbundles.py
+++ b/infocalypse/insertingbundles.py
@@ -22,6 +22,7 @@
from graph import graph_to_string, UpToDate, INSERT_SALTED_METADATA, \
FREENET_BLOCK_LEN
+from bundlecache import BundleException
from statemachine import RequestQueueState
@@ -150,10 +151,23 @@ class InsertingBundles(RequestQueueState
if len(self.new_edges) == 0:
return None
- edge = self.new_edges.pop()
- request = self.parent.ctx.make_edge_insert_request(edge, edge,
+ request = None
+ try:
+ edge = self.new_edges.pop()
+ request = self.parent.ctx.make_edge_insert_request(edge, edge,
self.salting_cache)
- self.pending[edge] = request
+ self.pending[edge] = request
+ except BundleException, err:
+ if self.parent.ctx.get('REINSERT', 0) > 0:
+ self.parent.ctx.ui_.warn("Couldn't create an identical bundle to "
+ + "re-insert.\n"
+ + "Maybe the repository was inserted with a "
+ + "different version of hg?\n")
+ self.parent.transition(FAILING)
+ else:
+ # Dunno what's going on.
+ raise
+
return request
def request_done(self, client, msg):
diff --git a/infocalypse/updatesm.py b/infocalypse/updatesm.py
--- a/infocalypse/updatesm.py
+++ b/infocalypse/updatesm.py
@@ -35,7 +35,7 @@ from fcpmessage import GET_DEF, PUT_FILE
from requestqueue import RequestQueue
from chk import clear_control_bytes
-from bundlecache import make_temp_file
+from bundlecache import make_temp_file, BundleException
from graph import INSERT_NORMAL, INSERT_PADDED, INSERT_SALTED_METADATA, \
minimal_update_graph, graph_to_string, \
FREENET_BLOCK_LEN, has_version, pull_bundle, parse_graph, hex_version
@@ -230,6 +230,10 @@ class UpdateContext(dict):
bundle = self.parent.ctx.bundle_cache.make_bundle(self.graph,
edge[:2],
tmp_file)
+
+ if bundle[0] != original_len:
+ raise BundleException("Wrong size. Expected: %i. Got: %i"
+ % (original_len, bundle[0]))
assert bundle[0] == original_len
if pad:
out_file = open(tmp_file, 'ab')