summaryrefslogtreecommitdiff
path: root/tools/bdb/erase-all-text-data.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/bdb/erase-all-text-data.py')
-rwxr-xr-xtools/bdb/erase-all-text-data.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/tools/bdb/erase-all-text-data.py b/tools/bdb/erase-all-text-data.py
new file mode 100755
index 0000000..288c4ab
--- /dev/null
+++ b/tools/bdb/erase-all-text-data.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python
+#
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+#
+#
+# Erases the text of every file in a BDB repository
+#
+
+import sys, os
+import skel, svnfs
+
+def main():
+ if len(sys.argv) == 2:
+ dbhome = os.path.join(sys.argv[1], 'db')
+ for i in ('', 'uuids', 'revisions', 'transactions', 'representations',
+ 'strings', 'changes', 'copies', 'nodes'):
+ if not os.path.exists(os.path.join(dbhome, i)):
+ sys.stderr.write("%s: '%s' is not a valid bdb svn repository\n" %
+ (sys.argv[0], sys.argv[1]))
+ sys.exit(1)
+ else:
+ sys.stderr.write("Usage: %s <bdb-svn-repository>\n" % sys.argv[0])
+ sys.exit(1)
+
+ print("WARNING!: This program will destroy all text data in the subversion")
+ print("repository '%s'" % sys.argv[1])
+ print("Do not proceed unless this is a *COPY* of your real repository")
+ print("If this is really what you want to do, " \
+ "type 'YESERASE' and press Return")
+ if sys.version_info[0] >= 3:
+ # Python >=3.0
+ confirmation = input("Confirmation string> ")
+ else:
+ # Python <3.0
+ confirmation = raw_input("Confirmation string> ")
+ if confirmation != "YESERASE":
+ print("Cancelled - confirmation string not matched")
+ sys.exit(0)
+ print("Opening database environment...")
+ cur = None
+ ctx = svnfs.Ctx(dbhome)
+ try:
+ cur = ctx.nodes_db.cursor()
+ nodecount = 0
+ newrep = skel.Rep()
+ newrep.str = "empty"
+ empty_fulltext_rep_skel = newrep.unparse()
+ del newrep
+ ctx.strings_db['empty'] = ""
+ rec = cur.first()
+ while rec:
+ if rec[0] != "next-key":
+ if (nodecount % 10000 == 0) and nodecount != 0:
+ print("Processed %d nodes..." % nodecount)
+ nodecount += 1
+ node = skel.Node(rec[1])
+ if node.kind == "file":
+ rep = skel.Rep(ctx.reps_db[node.datarep])
+ if rep.kind == "fulltext":
+ if rep.str in ctx.strings_db:
+ del ctx.strings_db[rep.str]
+ ctx.reps_db[node.datarep] = empty_fulltext_rep_skel
+ else:
+ for w in rep.windows:
+ if w.str in ctx.strings_db:
+ del ctx.strings_db[w.str]
+ ctx.reps_db[node.datarep] = empty_fulltext_rep_skel
+ rec = cur.next()
+ print("Processed %d nodes" % nodecount)
+ finally:
+ if cur:
+ cur.close()
+ ctx.close()
+ print("Done")
+
+if __name__ == '__main__':
+ main()