From a383c174448f612c10736dc87e9d1cac471aaa35 Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Thu, 7 Jun 2007 12:38:22 -0700
Subject: [PATCH] hashtree.BadHashError: mention which leaf caused the problem

---
 src/allmydata/hashtree.py | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/allmydata/hashtree.py b/src/allmydata/hashtree.py
index 3694b91b..31c78757 100644
--- a/src/allmydata/hashtree.py
+++ b/src/allmydata/hashtree.py
@@ -304,6 +304,14 @@ class IncompleteHashTree(CompleteBinaryTreeMixin, list):
             maybe_needed.add(self.first_leaf_num + leafnum)
         return set([i for i in maybe_needed if self[i] is None])
 
+    def _name_hash(self, i):
+        name = "[%d of %d]" % (i, len(self))
+        if i >= self.first_leaf_num:
+            leafnum = i - self.first_leaf_num
+            numleaves = len(self) - self.first_leaf_num
+            name += " (leaf [%d] of %d)" % (leafnum, numleaves)
+        return name
+
     def set_hashes(self, hashes={}, leaves={}):
         """Add a bunch of hashes to the tree.
 
@@ -376,7 +384,9 @@ class IncompleteHashTree(CompleteBinaryTreeMixin, list):
             for i in new_hashes:
                 if self[i]:
                     if self[i] != new_hashes[i]:
-                        raise BadHashError("new hash does not match existing hash at [%d]" % i)
+                        msg = "new hash does not match existing hash at "
+                        msg += self._name_hash(i)
+                        raise BadHashError(msg)
                 else:
                     self[i] = new_hashes[i]
                     added.add(i)
-- 
2.45.2