def __addReplicateActions(self, menu, link): c = Connector() try: allVolumes = set(c.lookup_rev(self.rev())) if isinstance(link, struct.DocLink): lookup = c.lookup_doc(link.doc()) curVolumes = set(lookup.stores()) try: for rev in lookup.revs(): curVolumes = curVolumes & set( c.lookup_rev(rev, curVolumes)) except IOError: curVolumes = set() else: curVolumes = set(c.lookup_rev(link.rev())) except IOError: return repVolumes = allVolumes - curVolumes for store in repVolumes: try: rev = c.lookup_doc(store).rev(store) with c.peek(rev) as r: metaData = struct.loads(r.readAll('META')) try: name = metaData["org.hotchpotch.annotation"]["title"] except: name = "Unknown store" action = menu.addAction("Replicate item to '%s'" % name) action.triggered.connect( lambda x, l=link, s=store: self.__doReplicate(l, s)) except: pass
def __addReplicateActions(self, menu, link): c = Connector() try: allVolumes = set(c.lookup_rev(self.rev())) if isinstance(link, struct.DocLink): lookup = c.lookup_doc(link.doc()) curVolumes = set(lookup.stores()) try: for rev in lookup.revs(): curVolumes = curVolumes & set(c.lookup_rev(rev, curVolumes)) except IOError: curVolumes = set() else: curVolumes = set(c.lookup_rev(link.rev())) except IOError: return repVolumes = allVolumes - curVolumes for store in repVolumes: try: rev = c.lookup_doc(store).rev(store) with c.peek(rev) as r: metaData = struct.loads(r.readAll('META')) try: name = metaData["org.hotchpotch.annotation"]["title"] except: name = "Unknown store" action = menu.addAction("Replicate item to '%s'" % name) action.triggered.connect( lambda x,l=link,s=store: self.__doReplicate(l, s)) except: pass
def test_merge(self): c = Connector() stores = [self.store1, self.store2] w = self.create("public.data", "test.ignore", stores) w.commit() doc = w.getDoc() rev = w.getRev() with c.update(doc, rev, stores=[self.store1]) as w: w.write('FILE', 'first') w.commit() rev1 = w.getRev() with c.update(doc, rev, stores=[self.store2]) as w: w.write('FILE', 'second') w.commit() rev2 = w.getRev() with c.update(doc, rev1, stores=stores) as w: w.setParents([rev1, rev2]) w.commit() rev3 = w.getRev() self.assertTrue(c.sync(doc) == rev3) l = c.lookup_doc(doc) self.assertEqual(l.revs(), [rev3]) self.assertEqual(set(c.lookup_rev(rev)), set(stores)) self.assertEqual(set(c.lookup_rev(rev1)), set(stores)) self.assertEqual(set(c.lookup_rev(rev2)), set(stores)) self.assertEqual(set(c.lookup_rev(rev3)), set(stores))
def test_merge(self): c = Connector() stores = [self.store1, self.store2] w = self.create("public.data", "test.ignore", stores) w.commit() doc = w.getDoc() rev = w.getRev() with c.update(doc, rev, stores=[self.store1]) as w: w.write('FILE', 'first') w.commit() rev1 = w.getRev() with c.update(doc, rev, stores=[self.store2]) as w: w.write('FILE', 'second') w.commit() rev2 = w.getRev() with c.update(doc, rev1, stores=stores) as w: w.setParents([rev1, rev2]) w.commit() rev3 = w.getRev() self.assertTrue(c.sync(doc) == rev3) l = c.lookup_doc(doc) self.assertEqual(l.revs(), [rev3]) self.assertEqual(set(c.lookup_rev(rev)), set(stores)) self.assertEqual(set(c.lookup_rev(rev1)), set(stores)) self.assertEqual(set(c.lookup_rev(rev2)), set(stores)) self.assertEqual(set(c.lookup_rev(rev3)), set(stores))