# # # patch "dumb.py" # from [73e69017052ea087951513ac0e3075eaa5afb1f6] # to [536a9da7bbb83e05da4a8b1572feb86b191f368c] # # patch "monotone.py" # from [3931efcc05198a4ab183247f0453edf70a13ab6b] # to [19f2084cc8a210e3de900ee4ff60f9745bba31bf] # ============================================================ --- dumb.py 73e69017052ea087951513ac0e3075eaa5afb1f6 +++ dumb.py 536a9da7bbb83e05da4a8b1572feb86b191f368c @@ -5,6 +5,7 @@ from cStringIO import StringIO from merkle_dir import MerkleDir, LockError from fs import readable_fs_for_url, writeable_fs_for_url +from monotone import Monotone import zlib def do_rollback(url): @@ -32,6 +33,7 @@ data = zlib.compress(kp) md.add(id, data) for rid in monotone.toposort(monotone.revisions_list()): + print "processing revision ", rid certs = monotone.get_cert_packets(rid) for cert in certs: id = sha.new(cert).hexdigest() @@ -51,10 +53,12 @@ new_manifest = stanza[0][1] elif stanza_type == "old_revision": if not old_manifest: - old_manifest = stanza[1][1] + old_manifest = stanza[0][1] + elif stanza_type == "add_file": + new_files[stanza[1][1]] = None elif stanza_type == "patch": - old_fid = stanza[1][1] - new_fid = stanza[2][1] + old_fid = stanza[1][1][0] + new_fid = stanza[2][1][0] if not new_files.has_key(new_fid): new_files[new_fid] = None if old_fid: @@ -130,7 +134,8 @@ print "Pushed %s packets to %s" % (push_c.added, other_url) def main(name, args): - pass + monotone = Monotone("etherape.db") + do_export(monotone, "guzi") if __name__ == "__main__": import sys ============================================================ --- monotone.py 3931efcc05198a4ab183247f0453edf70a13ab6b +++ monotone.py 19f2084cc8a210e3de900ee4ff60f9745bba31bf @@ -69,22 +69,22 @@ return self.run_monotone(["pubkey", keyid]) def get_revision_packet(self, rid): - return self.run_monotone(["rdata", rid]) + return self.automate("packet_for_rdata", rid) def get_file_packet(self, fid): - return self.run_monotone(["fdata", fid]) + return self.automate("packet_for_fdata", fid) def get_file_delta_packet(self, old_fid, new_fid): - return self.run_monotone(["fdelta", old_fid, new_fid]) + return self.automate("packet_for_fdelta", old_fid, new_fid) def get_manifest_packet(self, mid): - return self.run_monotone(["mdata", mid]) + return self.automate("packet_for_mdata", mid) def get_manifest_delta_packet(self, old_mid, new_mid): - return self.run_monotone(["mdelta", old_mid, new_mid]) + return self.automate("packet_for_mdelta", old_mid, new_mid) def get_cert_packets(self, rid): - output = self.run_monotone(["certs", rid]) + output = self.automate("packets_for_certs", rid) packets = [] curr_packet = "" for line in output.strip().split("\n"): @@ -97,13 +97,12 @@ def key_names(self): output = self.automate("keys") - print output keys_parsed = self.basic_io_parser(output) ids = {} for stanza in keys_parsed: assert stanza[0][0] == "name" key_name = stanza[0][1] - ids[key_name] = None + ids[key_name[0]] = None return ids.keys() @@ -174,6 +173,7 @@ basic_io_string_re = re.compile(r'^ *(\S+) (\".*)$') def unescape_string_value(str): rv = "" + valuestr = [] is_terminated = False in_escape = False if str[0] != '"': @@ -187,13 +187,21 @@ else: if c == '\\': in_escape = True + elif c == ' ' and is_terminated: + pass elif c == '"': - if is_terminated: - raise Exception("basic_io parse error; string ends twice!") - is_terminated = True + if is_terminated: + if len(rv)>0: + raise Exception("basic_io parse error; string ends twice! '"+ str+"'") + else: + is_terminated=False + else: + is_terminated = True + valuestr.append(rv) + rv = "" else: rv += c - return is_terminated, rv + return is_terminated, valuestr rv = [] stanza = [] ongoing_string = None