[Pkg-bazaar-commits] ./bzr/unstable r236: - Experiments in inventory performance
mbp at sourcefrog.net
mbp at sourcefrog.net
Fri Apr 10 07:43:58 UTC 2009
------------------------------------------------------------
revno: 236
committer: mbp at sourcefrog.net
timestamp: Mon 2005-04-11 12:44:45 +1000
message:
- Experiments in inventory performance
added:
bzrlib/textinv.py
modified:
bzrlib/commands.py
-------------- next part --------------
=== modified file 'bzrlib/commands.py'
--- a/bzrlib/commands.py 2005-04-11 01:58:58 +0000
+++ b/bzrlib/commands.py 2005-04-11 02:44:45 +0000
@@ -488,7 +488,20 @@
import bzrlib.newinventory
inv = Branch('.').basis_tree().inventory
bzrlib.newinventory.write_slacker_inventory(inv, sys.stdout)
-
+
+
+
+def cmd_dump_text_inventory():
+ import bzrlib.textinv
+ inv = Branch('.').basis_tree().inventory
+ bzrlib.textinv.write_text_inventory(inv, sys.stdout)
+
+
+def cmd_load_text_inventory():
+ import bzrlib.textinv
+ inv = bzrlib.textinv.read_text_inventory(sys.stdin)
+ print 'loaded %d entries' % len(inv)
+
def cmd_root(filename=None):
@@ -1016,7 +1029,9 @@
## traceback.print_exc(None, sys.stderr)
return 1
- # TODO: Maybe nicer handling of IOError?
+ ## TODO: Trap AssertionError
+
+ # TODO: Maybe nicer handling of IOError especially for broken pipe.
=== added file 'bzrlib/textinv.py'
--- a/bzrlib/textinv.py 1970-01-01 00:00:00 +0000
+++ b/bzrlib/textinv.py 2005-04-11 02:44:45 +0000
@@ -0,0 +1,93 @@
+# (C) 2005 Canonical Ltd
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+from errors import BzrError
+from inventory import InventoryEntry, Inventory
+
+
+START_MARK = "# bzr inventory format 3\n"
+END_MARK = "# end of inventory\n"
+
+
+def escape(s):
+ """Very simple URL-like escaping.
+
+ (Why not just use backslashes? Because then we couldn't parse
+ lines just by splitting on spaces.)"""
+ return (s.replace('\\', r'\x5c')
+ .replace(' ', r'\x20')
+ .replace('\t', r'\x09')
+ .replace('\n', r'\x0a'))
+
+
+
+def unescape(s):
+ assert s.find(' ') == -1
+ s = (s.replace(r'\x20', ' ')
+ .replace(r'\x09', '\t')
+ .replace(r'\x0a', '\n')
+ .replace(r'\x5c', '\\'))
+
+ # TODO: What if there's anything else?
+
+ return s
+
+
+
+
+def write_text_inventory(inv, outf):
+ """Write out inv in a simple trad-unix text format."""
+ outf.write(START_MARK)
+ for path, ie in inv.iter_entries():
+ if ie.kind == 'root_directory':
+ continue
+
+ outf.write(ie.file_id + ' ')
+ outf.write(escape(ie.name) + ' ')
+ outf.write(ie.kind + ' ')
+ outf.write(ie.parent_id + ' ')
+
+ if ie.kind == 'file':
+ outf.write(ie.text_id)
+ outf.write(' ' + ie.text_sha1)
+ outf.write(' ' + str(ie.text_size))
+ outf.write("\n")
+ outf.write(END_MARK)
+
+
+
+
+def read_text_inventory(tf):
+ """Return an inventory read in from tf"""
+ if tf.readline() != START_MARK:
+ raise BzrError("missing start mark")
+
+ inv = Inventory()
+
+ for l in tf:
+ fields = l.split(' ')
+ if fields[0] == '#':
+ break
+ ie = {'file_id': fields[0],
+ 'name': unescape(fields[1]),
+ 'kind': fields[2],
+ 'parent_id': fields[3]}
+ ##inv.add(ie)
+
+ if l != END_MARK:
+ raise BzrError("missing end mark")
+ return inv
More information about the Pkg-bazaar-commits
mailing list