Esempio n. 1
0
	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
Esempio n. 2
0
 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
Esempio n. 3
0
    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))
Esempio n. 4
0
    def test_suspend_multi(self):
        c = Connector()
        (doc, rev1, rev_s1) = self.createSuspendDoc()

        with c.update(doc, rev1) as w:
            w.writeAll('FILE', 'forward')
            w.commit()
            rev2 = w.getRev()

        with c.update(doc, rev2) as w:
            w.writeAll('FILE', 'Hail to the king, baby!')
            w.suspend()
            rev_s2 = w.getRev()

        l = c.lookup_doc(doc)
        self.assertEqual(l.revs(), [rev2])
        self.assertEqual(len(l.preRevs()), 2)
        self.assertTrue(rev_s1 in l.preRevs())
        self.assertTrue(rev_s2 in l.preRevs())

        s = c.stat(rev_s1)
        self.assertEqual(s.parents(), [rev1])
        s = c.stat(rev_s2)
        self.assertEqual(s.parents(), [rev2])

        self.assertRevContent(rev1, {'FILE': 'ok'})
        self.assertRevContent(rev_s1, {'FILE': 'update'})
        self.assertRevContent(rev2, {'FILE': 'forward'})
        self.assertRevContent(rev_s2, {'FILE': 'Hail to the king, baby!'})
Esempio n. 5
0
	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))
Esempio n. 6
0
    def test_bad(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()

        self.failIfEqual(rev, rev1)
        self.failIfEqual(rev, rev2)
        self.failIfEqual(rev1, rev2)

        self.assertRaises(IOError, c.sync, doc)

        l = c.lookup_doc(doc)
        self.assertEqual(len(l.revs()), 2)
        self.assertEqual(l.rev(self.store1), rev1)
        self.assertEqual(l.rev(self.store2), rev2)
Esempio n. 7
0
	def test_bad(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()

		self.failIfEqual(rev, rev1)
		self.failIfEqual(rev, rev2)
		self.failIfEqual(rev1, rev2)

		self.assertRaises(IOError, c.sync, doc)

		l = c.lookup_doc(doc)
		self.assertEqual(len(l.revs()), 2)
		self.assertEqual(l.rev(self.store1), rev1)
		self.assertEqual(l.rev(self.store2), rev2)
Esempio n. 8
0
	def test_suspend_multi(self):
		c = Connector()
		(doc, rev1, rev_s1) = self.createSuspendDoc()

		with c.update(doc, rev1) as w:
			w.writeAll('FILE', 'forward')
			w.commit()
			rev2 = w.getRev()

		with c.update(doc, rev2) as w:
			w.writeAll('FILE', 'Hail to the king, baby!')
			w.suspend()
			rev_s2 = w.getRev()

		l = c.lookup_doc(doc)
		self.assertEqual(l.revs(), [rev2])
		self.assertEqual(len(l.preRevs()), 2)
		self.assertTrue(rev_s1 in l.preRevs())
		self.assertTrue(rev_s2 in l.preRevs())

		s = c.stat(rev_s1)
		self.assertEqual(s.parents(), [rev1])
		s = c.stat(rev_s2)
		self.assertEqual(s.parents(), [rev2])

		self.assertRevContent(rev1, {'FILE' : 'ok'})
		self.assertRevContent(rev_s1, {'FILE' : 'update'})
		self.assertRevContent(rev2, {'FILE' : 'forward'})
		self.assertRevContent(rev_s2, {'FILE' : 'Hail to the king, baby!'})
Esempio n. 9
0
    def test_suspend(self):
        c = Connector()
        (doc, rev1, rev2) = self.createSuspendDoc()

        l = c.lookup_doc(doc)
        self.assertEqual(l.revs(), [rev1])
        self.assertEqual(l.preRevs(), [rev2])
        self.assertRevContent(rev1, {'FILE': 'ok'})
        self.assertRevContent(rev2, {'FILE': 'update'})
Esempio n. 10
0
	def test_suspend(self):
		c = Connector()
		(doc, rev1, rev2) = self.createSuspendDoc()

		l = c.lookup_doc(doc)
		self.assertEqual(l.revs(), [rev1])
		self.assertEqual(l.preRevs(), [rev2])
		self.assertRevContent(rev1, {'FILE' : 'ok'})
		self.assertRevContent(rev2, {'FILE' : 'update'})
Esempio n. 11
0
	def test_resume_abort(self):
		c = Connector()
		(doc, rev1, rev2) = self.createSuspendDoc()

		with c.resume(doc, rev2) as w:
			w.writeAll('FILE', 'Hail to the king, baby!')

			l = c.lookup_doc(doc)
			self.assertEqual(l.revs(), [rev1])
			self.assertEqual(l.preRevs(), [rev2])

			w.close()

		l = c.lookup_doc(doc)
		self.assertEqual(l.revs(), [rev1])
		self.assertEqual(l.preRevs(), [rev2])
		self.assertRevContent(rev1, {'FILE' : 'ok'})
		self.assertRevContent(rev2, {'FILE' : 'update'})
Esempio n. 12
0
    def test_resume_abort(self):
        c = Connector()
        (doc, rev1, rev2) = self.createSuspendDoc()

        with c.resume(doc, rev2) as w:
            w.writeAll('FILE', 'Hail to the king, baby!')

            l = c.lookup_doc(doc)
            self.assertEqual(l.revs(), [rev1])
            self.assertEqual(l.preRevs(), [rev2])

            w.close()

        l = c.lookup_doc(doc)
        self.assertEqual(l.revs(), [rev1])
        self.assertEqual(l.preRevs(), [rev2])
        self.assertRevContent(rev1, {'FILE': 'ok'})
        self.assertRevContent(rev2, {'FILE': 'update'})
Esempio n. 13
0
	def test_resume_wrong(self):
		c = Connector()
		(doc, rev1, rev2) = self.createSuspendDoc()
		self.assertRaises(IOError, c.resume, doc, rev1)

		l = c.lookup_doc(doc)
		self.assertEqual(l.revs(), [rev1])
		self.assertEqual(l.preRevs(), [rev2])
		self.assertRevContent(rev1, {'FILE' : 'ok'})
		self.assertRevContent(rev2, {'FILE' : 'update'})
Esempio n. 14
0
    def test_resume_wrong(self):
        c = Connector()
        (doc, rev1, rev2) = self.createSuspendDoc()
        self.assertRaises(IOError, c.resume, doc, rev1)

        l = c.lookup_doc(doc)
        self.assertEqual(l.revs(), [rev1])
        self.assertEqual(l.preRevs(), [rev2])
        self.assertRevContent(rev1, {'FILE': 'ok'})
        self.assertRevContent(rev2, {'FILE': 'update'})
Esempio n. 15
0
	def test_collect(self):
		c = Connector()

		# deliberately close handle after creating!
		with c.create("public.data", "test.foo", [self.store1]) as w:
			w.commit()
			doc = w.getDoc()
			rev = w.getRev()

		# perform a GC cycle
		self.gc(self.store1)

		l = c.lookup_doc(doc)
		self.assertEqual(l.revs(), [])
		self.assertEqual(l.preRevs(), [])
		self.assertRaises(IOError, c.stat, rev)
Esempio n. 16
0
    def test_collect(self):
        c = Connector()

        # deliberately close handle after creating!
        with c.create("public.data", "test.foo", [self.store1]) as w:
            w.commit()
            doc = w.getDoc()
            rev = w.getRev()

        # perform a GC cycle
        self.gc(self.store1)

        l = c.lookup_doc(doc)
        self.assertEqual(l.revs(), [])
        self.assertEqual(l.preRevs(), [])
        self.assertRaises(IOError, c.stat, rev)
Esempio n. 17
0
	def test_create_keep_handle(self):
		c = Connector()

		with c.create("public.data", "test.foo", [self.store1]) as w:
			w.commit()
			doc = w.getDoc()
			rev = w.getRev()

			# perform a GC cycle
			self.gc(self.store1)

			l = c.lookup_doc(doc)
			self.assertEqual(l.revs(), [rev])
			self.assertEqual(l.preRevs(), [])

			c.stat(rev)
Esempio n. 18
0
    def test_create_keep_handle(self):
        c = Connector()

        with c.create("public.data", "test.foo", [self.store1]) as w:
            w.commit()
            doc = w.getDoc()
            rev = w.getRev()

            # perform a GC cycle
            self.gc(self.store1)

            l = c.lookup_doc(doc)
            self.assertEqual(l.revs(), [rev])
            self.assertEqual(l.preRevs(), [])

            c.stat(rev)
Esempio n. 19
0
	def test_resume_commit(self):
		c = Connector()
		(doc, rev1, rev2) = self.createSuspendDoc()

		with c.resume(doc, rev2) as w:
			w.writeAll('FILE', 'What are you waiting for, christmas?')
			w.commit()
			rev3 = w.getRev()

		l = c.lookup_doc(doc)
		self.assertEqual(l.revs(), [rev3])
		self.assertEqual(len(l.preRevs()), 0)

		s = c.stat(rev3)
		self.assertEqual(s.parents(), [rev1])
		self.assertRevContent(rev1, {'FILE' : 'ok'})
		self.assertRevContent(rev3, {'FILE' : 'What are you waiting for, christmas?'})
Esempio n. 20
0
    def test_resume_suspend_orig(self):
        c = Connector()
        (doc, rev1, rev2) = self.createSuspendDoc()

        with c.resume(doc, rev2) as w:
            w.suspend()
            rev3 = w.getRev()

        l = c.lookup_doc(doc)
        self.assertEqual(l.revs(), [rev1])
        self.assertEqual(l.preRevs(), [rev3])

        s = c.stat(rev3)
        self.assertEqual(s.parents(), [rev1])

        self.assertRevContent(rev1, {'FILE': 'ok'})
        self.assertRevContent(rev3, {'FILE': 'update'})
Esempio n. 21
0
	def test_resume_suspend_orig(self):
		c = Connector()
		(doc, rev1, rev2) = self.createSuspendDoc()

		with c.resume(doc, rev2) as w:
			w.suspend()
			rev3 = w.getRev()

		l = c.lookup_doc(doc)
		self.assertEqual(l.revs(), [rev1])
		self.assertEqual(l.preRevs(), [rev3])

		s = c.stat(rev3)
		self.assertEqual(s.parents(), [rev1])

		self.assertRevContent(rev1, {'FILE' : 'ok'})
		self.assertRevContent(rev3, {'FILE' : 'update'})
Esempio n. 22
0
    def test_resume_commit(self):
        c = Connector()
        (doc, rev1, rev2) = self.createSuspendDoc()

        with c.resume(doc, rev2) as w:
            w.writeAll('FILE', 'What are you waiting for, christmas?')
            w.commit()
            rev3 = w.getRev()

        l = c.lookup_doc(doc)
        self.assertEqual(l.revs(), [rev3])
        self.assertEqual(len(l.preRevs()), 0)

        s = c.stat(rev3)
        self.assertEqual(s.parents(), [rev1])
        self.assertRevContent(rev1, {'FILE': 'ok'})
        self.assertRevContent(rev3,
                              {'FILE': 'What are you waiting for, christmas?'})
Esempio n. 23
0
	def test_good(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', 'update')
			w.commit()
			rev = w.getRev()

		self.assertTrue(c.sync(doc) == rev)

		l = c.lookup_doc(doc)
		self.assertEqual(len(l.revs()), 1)
		self.assertEqual(l.rev(self.store1), rev)
		self.assertEqual(l.rev(self.store2), rev)
Esempio n. 24
0
    def test_good(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', 'update')
            w.commit()
            rev = w.getRev()

        self.assertTrue(c.sync(doc) == rev)

        l = c.lookup_doc(doc)
        self.assertEqual(len(l.revs()), 1)
        self.assertEqual(l.rev(self.store1), rev)
        self.assertEqual(l.rev(self.store2), rev)
Esempio n. 25
0
    def test_forget(self):
        c = Connector()
        (doc, rev1, rev_s1) = self.createSuspendDoc()

        with c.update(doc, rev1) as w:
            w.writeAll('FILE', 'forward')
            w.commit()
            rev2 = w.getRev()

        with c.update(doc, rev2) as w:
            w.writeAll('FILE', 'Hail to the king, baby!')
            w.suspend()
            rev_s2 = w.getRev()

        self.assertRaises(IOError, c.forget, doc, rev1)
        c.forget(doc, rev_s1)

        l = c.lookup_doc(doc)
        self.assertEqual(l.revs(), [rev2])
        self.assertEqual(l.preRevs(), [rev_s2])
Esempio n. 26
0
	def test_forget(self):
		c = Connector()
		(doc, rev1, rev_s1) = self.createSuspendDoc()

		with c.update(doc, rev1) as w:
			w.writeAll('FILE', 'forward')
			w.commit()
			rev2 = w.getRev()

		with c.update(doc, rev2) as w:
			w.writeAll('FILE', 'Hail to the king, baby!')
			w.suspend()
			rev_s2 = w.getRev()

		self.assertRaises(IOError, c.forget, doc, rev1)
		c.forget(doc, rev_s1)

		l = c.lookup_doc(doc)
		self.assertEqual(l.revs(), [rev2])
		self.assertEqual(l.preRevs(), [rev_s2])
Esempio n. 27
0
	def test_fork_keep_handle(self):
		c = Connector()

		w = self.create("test.format.foo", "test.ignore", [self.store1])
		self.assertEqual(w.getType(), "test.format.foo")
		w.commit()
		doc1 = w.getDoc()
		rev1 = w.getRev()

		with c.fork(rev1, "test.ignore") as w:
			w.write('FILE', 'update')
			w.commit()
			doc2 = w.getDoc()
			rev2 = w.getRev()

			# perform a GC cycle
			self.gc(self.store1)

			l = c.lookup_doc(doc2)
			self.assertEqual(l.revs(), [rev2])
			self.assertEqual(l.preRevs(), [])
			c.stat(rev2)
Esempio n. 28
0
    def test_fork_keep_handle(self):
        c = Connector()

        w = self.create("test.format.foo", "test.ignore", [self.store1])
        self.assertEqual(w.getType(), "test.format.foo")
        w.commit()
        doc1 = w.getDoc()
        rev1 = w.getRev()

        with c.fork(rev1, "test.ignore") as w:
            w.write('FILE', 'update')
            w.commit()
            doc2 = w.getDoc()
            rev2 = w.getRev()

            # perform a GC cycle
            self.gc(self.store1)

            l = c.lookup_doc(doc2)
            self.assertEqual(l.revs(), [rev2])
            self.assertEqual(l.preRevs(), [])
            c.stat(rev2)