Example #1
0
 def create(_):
     """Create and stash the MultiGit instance"""
     self.multigit = MultiGit(self.parent_directory)
     self.multigit.master = self.master
Example #2
0
class TestMultiGit(unittest.TestCase, changesource.ChangeSourceMixin):
    """Test multiple git repository polling"""
    def setUp(self):
        self.parent_directory = mkdtemp('.testgit')
        with file(join(self.parent_directory,'foo'), 'w') as f:
            f.write('ignore me\n')
        self.repos = [PopulatedRepository(),PopulatedRepository()]
        deferred = sequencer([repo.populatedRepositorySetUp(self.parent_directory, name) for 
                                          repo, name in zip(self.repos, ['alpha', 'beta'])])
        deferred.addCallback(lambda _: self.setUpChangeSource())
        def create(_):
            """Create and stash the MultiGit instance"""
            self.multigit = MultiGit(self.parent_directory)
            self.multigit.master = self.master
        return deferred.addCallback(create)
    def tearDown(self):
        deferred = run('rm', ['-rf', self.parent_directory])
        def detach(_):
            del self.multigit
        deferred.addCallback(detach)
        return deferred.addCallback(lambda _: self.tearDownChangeSource())
    def test_poll_nothing_untagged(self):
        deferred = self.multigit.poll()
        def check1(_):
            self.assertEqual(len(self.changes_added), 0)
        return deferred.addCallback(check1)
    def test_poll_two_commits(self):
        deferred = add_commit(self.repos[0].workd, 'a', 'b', 'xyzzy')
        deferred.addCallback(
            lambda _: add_commit(self.repos[0].workd, 'c', 'd', 'e'))
        self.multigit.age_requirement = 0
        deferred.addCallback(lambda _: self.multigit.poll())
        def check2(_):
            self.assertEqual(len(self.changes_added), 1)
            self.failUnless('xyzzy' in self.changes_added[0]['comments'])
            self.assertEqual('master-2', self.changes_added[0]['revision'])
        return deferred.addCallback(check2)
    def test_poll_one_recent_commit(self):
        deferred = add_commit(self.repos[0].workd, 'a', 'b', 'xyzzy')
        self.multigit.ageRequirement = 600
        deferred.addCallback(lambda _: self.multigit.poll())
        def check(_):
            self.assertEqual(len(self.changes_added), 0)
        return deferred.addCallback(check)
    def test_poll_one_commit_has_when(self):
        deferred = add_commit(self.repos[0].workd, 'a', 'b', 'xyzzy')
        deferred.addCallback(lambda _: self.multigit.poll())
        def check(_):
            if self.changes_added:
                when = self.changes_added[0]['when']
            else:
                when = 0
            self.failUnless(time() - when < 60)
        return deferred.addCallback(check)
    def test_poll_one_commit_has_author(self):
        deferred = add_commit(self.repos[0].workd, 'a', 'b', 'xyzzy')
        deferred.addCallback(lambda _: self.multigit.poll())
        def check(_):
            if self.changes_added:
                author = self.changes_added[0]['author']
            else:
                author = None
            self.failUnless(author)
        return deferred.addCallback(check)
    def test_poll_one_commit_has_file(self):
        deferred = add_commit(self.repos[0].workd, 'a', 'b', 'xyzzy')
        deferred.addCallback(lambda _: self.multigit.poll())
        def check(_):
            if self.changes_added:
                files = self.changes_added[0]['files']
            else:
                files = None
            self.failUnless(len(files) == 1 and 'a' in repr(files))
        return deferred.addCallback(check)
    def test_poll_multi_branches(self):
        deferred = add_commit(self.repos[0].workd, 'a', 'b', 'xyzzy')
        deferred.addCallback(lambda _:
                                add_commit(self.repos[0].workd, 'd', 'e', 'erer', branch='branch2'))
        self.multigit.age_requirement = 0
        deferred.addCallback(lambda _: self.multigit.poll())
        def check(_):
            self.assertEqual(len(self.changes_added), 2)
        return deferred.addCallback(check)
    def test_describe_has_directory(self):
        self.failUnless(self.parent_directory in self.multigit.describe())
    def test_describe_never_ran(self):
        self.failUnless('unrun' in self.multigit.describe())
    def test_new_revision_callback(self):
        seq = []
        def add(*l, **d):
            seq.append( (l, d))
        self.multigit.newRevisionCallback = add
        deferred = add_commit(self.repos[0].workd, 'a', 'b', 'fish')
        deferred.addCallback(lambda _: self.multigit.poll())
        def check(_):
            self.assertEquals(len(seq), 1)
            self.failUnless('fish' in repr(seq))
        return deferred.addCallback(check)
    def test_trigger(self):
        deferred = self.multigit.poll()
        deferred.addCallback(lambda _: add_commit(self.repos[0].workd, 'a', 'b', 'fish'))
        deferred.addCallback(lambda _: self.multigit.notify(self.repos[0].workd, 'master'))
        return deferred.addCallback(lambda _: self.assertEquals(len(self.changes_added), 1))