def copy_milestone(source_env, dest_env, name, dest_db=None): # In case a string gets passed in if not isinstance(source_env, Environment): source_env = _open_environment(source_env) if not isinstance(dest_env, Environment): dest_env = _open_environment(dest_env) # Log message source_env.log.info('DatamoverPlugin: Moving milestone %s to the environment at %s', name, dest_env.path) dest_env.log.info('DatamoverPlugin: Moving milestone %s from the environment at %s', name, source_env.path) # Open databases source_db = source_env.get_db_cnx() source_cursor = source_db.cursor() handle_commit = True if not dest_db: dest_db, handle_commit = dest_env.get_db_cnx(), False dest_cursor = dest_db.cursor() # Remove the milestone from the destination try: dest_milestone = Milestone(dest_env, name, db=dest_db) dest_milestone.delete(retarget_to=name, db=dest_db) except TracError: pass # Copy each entry in the milestone table source_cursor.execute('SELECT * FROM milestone WHERE name=%s',(name,)) for row in source_cursor: milestone_data = dict(zip([d[0] for d in source_cursor.description], row)) q = make_query(milestone_data, 'milestone') dest_cursor.execute(*q) if handle_commit: dest_db.commit()
def test_delete_milestone(self): self.env.db_transaction("INSERT INTO milestone (name) VALUES ('Test')") milestone = Milestone(self.env, 'Test') milestone.delete() self.assertEqual(False, milestone.exists) self.assertEqual([], self.env.db_query("SELECT * FROM milestone WHERE name='Test'"))
def test_delete_milestone(self): self.env.db_transaction("INSERT INTO milestone (name) VALUES ('Test')") milestone = Milestone(self.env, 'Test') milestone.delete() self.assertEqual(False, milestone.exists) self.assertEqual( [], self.env.db_query("SELECT * FROM milestone WHERE name='Test'"))
def test_delete_milestone(self): cursor = self.db.cursor() cursor.execute("INSERT INTO milestone (name) VALUES ('Test')") cursor.close() milestone = Milestone(self.env, 'Test') milestone.delete() cursor = self.db.cursor() cursor.execute("SELECT * FROM milestone WHERE name='Test'") self.assertEqual(None, cursor.fetchone())
def test_delete_milestone_with_attachment(self): milestone = Milestone(self.env) milestone.name = 'MilestoneWithAttachment' milestone.insert() attachment = Attachment(self.env, 'milestone', milestone.name) attachment.insert('foo.txt', StringIO(), 0, 1) milestone.delete() self.assertEqual(False, milestone.exists) attachments = Attachment.select(self.env, 'milestone', milestone.name) self.assertRaises(StopIteration, attachments.next)
def test_delete_milestone_retarget_tickets(self): self.env.db_transaction("INSERT INTO milestone (name) VALUES ('Test')") tkt1 = Ticket(self.env) tkt1.populate({'summary': 'Foo', 'milestone': 'Test'}) tkt1.insert() tkt2 = Ticket(self.env) tkt2.populate({'summary': 'Bar', 'milestone': 'Test'}) tkt2.insert() milestone = Milestone(self.env, 'Test') milestone.delete(retarget_to='Other') self.assertEqual(False, milestone.exists) self.assertEqual('Other', Ticket(self.env, tkt1.id)['milestone']) self.assertEqual('Other', Ticket(self.env, tkt2.id)['milestone'])
def test_delete_milestone_retarget_tickets(self): cursor = self.db.cursor() cursor.execute("INSERT INTO milestone (name) VALUES ('Test')") cursor.close() tkt1 = Ticket(self.env) tkt1.populate({'summary': 'Foo', 'milestone': 'Test'}) tkt1.insert() tkt2 = Ticket(self.env) tkt2.populate({'summary': 'Bar', 'milestone': 'Test'}) tkt2.insert() milestone = Milestone(self.env, 'Test') milestone.delete(retarget_to='Other') self.assertEqual('Other', Ticket(self.env, tkt1.id)['milestone']) self.assertEqual('Other', Ticket(self.env, tkt2.id)['milestone'])
def test_delete_milestone_retarget_tickets(self): cursor = self.db.cursor() cursor.execute("INSERT INTO milestone (name) VALUES ('Test')") cursor.close() tkt1 = Ticket(self.env) tkt1.populate({"summary": "Foo", "milestone": "Test"}) tkt1.insert() tkt2 = Ticket(self.env) tkt2.populate({"summary": "Bar", "milestone": "Test"}) tkt2.insert() milestone = Milestone(self.env, "Test") milestone.delete(retarget_to="Other") self.assertEqual(False, milestone.exists) self.assertEqual("Other", Ticket(self.env, tkt1.id)["milestone"]) self.assertEqual("Other", Ticket(self.env, tkt2.id)["milestone"])
def test_delete_milestone(self): self.env.db_transaction("INSERT INTO milestone (name) VALUES ('Test')") tkt1 = self._insert_ticket(status='new', summary='Foo', milestone='Test') tkt2 = self._insert_ticket(status='new', summary='Bar', milestone='Test') self._update_ticket(tkt2, status='closed', resolution='fixed') milestone = Milestone(self.env, 'Test') milestone.delete() self.assertFalse(milestone.exists) self.assertEqual([], self.env.db_query("SELECT * FROM milestone WHERE name='Test'")) tkt1 = Ticket(self.env, tkt1.id) tkt2 = Ticket(self.env, tkt2.id) self.assertEqual('', tkt1['milestone']) self.assertEqual('', tkt2['milestone']) self.assertEqual(tkt1['changetime'], tkt2['changetime']) self.assertNotEqual(self.updated_at, tkt1['changetime'])
def test_delete_milestone_retarget_tickets(self): self.env.db_transaction.executemany( "INSERT INTO milestone (name) VALUES (%s)", [('Test',), ('Other',)]) tkt1 = self._insert_ticket(status='new', summary='Foo', milestone='Test') tkt2 = self._insert_ticket(status='new', summary='Bar', milestone='Test') self._update_ticket(tkt2, status='closed', resolution='fixed') milestone = Milestone(self.env, 'Test') milestone.delete(retarget_to='Other') self.assertFalse(milestone.exists) tkt1 = Ticket(self.env, tkt1.id) tkt2 = Ticket(self.env, tkt2.id) self.assertEqual('Other', tkt1['milestone']) self.assertEqual('Other', tkt2['milestone']) self.assertEqual(tkt1['changetime'], tkt2['changetime']) self.assertNotEqual(self.updated_at, tkt1['changetime'])
def copy_milestone(source_env, dest_env, name, dest_db=None): # In case a string gets passed in if not isinstance(source_env, Environment): source_env = _open_environment(source_env) if not isinstance(dest_env, Environment): dest_env = _open_environment(dest_env) # Log message source_env.log.info( 'DatamoverPlugin: Moving milestone %s to the environment at %s', name, dest_env.path) dest_env.log.info( 'DatamoverPlugin: Moving milestone %s from the environment at %s', name, source_env.path) # Open databases source_db = source_env.get_db_cnx() source_cursor = source_db.cursor() handle_commit = True if not dest_db: dest_db, handle_commit = dest_env.get_db_cnx(), False dest_cursor = dest_db.cursor() # Remove the milestone from the destination try: dest_milestone = Milestone(dest_env, name, db=dest_db) dest_milestone.delete(retarget_to=name, db=dest_db) except TracError: pass # Copy each entry in the milestone table source_cursor.execute('SELECT * FROM milestone WHERE name=%s', (name, )) for row in source_cursor: milestone_data = dict( zip([d[0] for d in source_cursor.description], row)) q = make_query(milestone_data, 'milestone') dest_cursor.execute(*q) if handle_commit: dest_db.commit()