Edgewall Software

Ticket #13092: t13092.diff

File t13092.diff, 14.9 KB (added by Jun Omae, 5 years ago)
  • tracext/hg/tests/backend.py

    changeset:   72:545a1383b382
    branch:      1.0
    user:        Jun Omae <jun66j5@gmail.com>
    date:        Wed Oct 17 22:59:36 2018 +0900
    summary:     Refactor unit tests
    
    diff -r 1b6c6b50f742 -r 545a1383b382 tracext/hg/tests/backend.py
    a b  
    100100            path = self.repos_path
    101101        self._dbrepoprov.add_repository(reponame, path, 'hg')
    102102
     103    def _get_repository(self, reponame='hgrepos'):
     104        return self._repomgr.get_repository(reponame)
     105
    103106    _hg_commit = wrap_int_times(mercurial.commands.commit)
    104107    _hg_update = wrap_int_times(mercurial.commands.update)
    105108    _hg_merge = wrap_int_times(mercurial.commands.merge)
     
    135138    def test_duplicate_repo(self):
    136139        self._hg_init()
    137140        self._add_repository('hgrepos.1')
    138         self.assertIsNotNone(self._repomgr.get_repository('hgrepos.1'))
     141        self.assertIsNotNone(self._get_repository('hgrepos.1'))
    139142        self._add_repository('hgrepos.2')
    140         self.assertIsNotNone(self._repomgr.get_repository('hgrepos.2'))
     143        self.assertIsNotNone(self._get_repository('hgrepos.2'))
    141144
    142145
    143146class HistoryTimeRangeTestCase(BaseTestCase):
     
    152155            self._hg_commit(filename, message='%d' % idx, addremove=True,
    153156                            user='Joe', date=dateformat(ts))
    154157        self._add_repository()
    155         repos = self._repomgr.get_repository('hgrepos')
     158        repos = self._get_repository()
    156159        repos.repo.invalidate()
    157160
    158161        revs = [repos.youngest_rev]
     
    177180    def test_get_node(self):
    178181        self._hg_init()
    179182        self._add_repository()
    180         repos = self._repomgr.get_repository('hgrepos')
     183        repos = self._get_repository()
    181184        rev = repos.youngest_rev
    182185        self.assertIsNotNone(rev)
    183186        self.assertEqual(40, len(rev))
     
    205208    def test_on_empty_repos(self):
    206209        self._hg_init(data=False)
    207210        self._add_repository()
    208         repos = self._repomgr.get_repository('hgrepos')
     211        repos = self._get_repository()
    209212        repos.repo.invalidate()
    210213        youngest_rev = repos.youngest_rev
    211214        nullrev = '0'*40
     
    262265
    263266    def test_repository_instance(self):
    264267        self._hg_init()
    265         self._add_repository('hgrepos')
    266         self.assertEqual(MercurialRepository,
    267                          type(self._repomgr.get_repository('hgrepos')))
     268        self._add_repository()
     269        self.assertEqual(MercurialRepository, type(self._get_repository()))
    268270
    269271    def test_tags(self):
    270272        self._hg_init()
    271         self._add_repository('hgrepos')
    272         repos = self._repomgr.get_repository('hgrepos')
     273        self._add_repository()
     274        repos = self._get_repository()
    273275        repos.repo.invalidate()
    274276        self.assertEqual(['default (tip)', 'tip'], self._get_quickjump_names(repos))
    275277        self._hg_tag('v1.0')  # add tag
     
    281283
    282284    def test_branchs(self):
    283285        self._hg_init()
    284         self._add_repository('hgrepos')
    285         repos = self._repomgr.get_repository('hgrepos')
     286        self._add_repository()
     287        repos = self._get_repository()
    286288        repos.repo.invalidate()
    287289        self.assertEqual(['default (tip)', 'tip'], self._get_quickjump_names(repos))
    288290        self._hg_branch('alpha')  # add branch
     
    292294
    293295    def test_bookmarks(self):
    294296        self._hg_init()
    295         self._add_repository('hgrepos')
    296         repos = self._repomgr.get_repository('hgrepos')
     297        self._add_repository()
     298        repos = self._get_repository()
    297299        repos.repo.invalidate()
    298300        self.assertEqual(['default (tip)', 'tip'], self._get_quickjump_names(repos))
    299301        self._hg_bookmark('alpha')  # add bookmark
     
    313315        self._create_commit('Summary', 'alpha.txt')
    314316        self._hg_tag('0.1.0dev')
    315317        self._hg_tag('0.1.0a', rev='3')
    316         self._add_repository('hgrepos')
    317         repos = self._repomgr.get_repository('hgrepos')
     318        self._add_repository()
     319        repos = self._get_repository()
    318320        repos.repo.invalidate()
    319321
    320322        def get_branches(repos, rev):
     
    344346        self._hg_merge(rev='beta')
    345347        self._hg_commit(message='Merge branch "beta" to "alpha"')
    346348
    347         self._add_repository('hgrepos')
    348         repos = self._repomgr.get_repository('hgrepos')
     349        self._add_repository()
     350        repos = self._get_repository()
    349351        repos.repo.invalidate()
    350352
    351353        rev = repos.normalize_rev('0')
     
    388390    def test_all_bookmarks(self):
    389391        # regression test for #12177
    390392        self._hg_init()
    391         self._add_repository('hgrepos')
    392         repos = self._repomgr.get_repository('hgrepos')
     393        self._add_repository()
     394        repos = self._get_repository()
    393395        self._create_commit('alpha', 'alpha.txt')
    394396        self._hg_bookmark('alpha', inactive=True)
    395397        self._create_commit('beta', 'beta.txt')
     
    401403        # regression test for #13047
    402404        self._hg_init()
    403405        self._add_repository()
    404         repos = self._repomgr.get_repository('hgrepos')
     406        repos = self._get_repository()
    405407        self._create_commit('alpha', 'alpha.txt', content='foo\n' * 10)
    406408        repos.repo.invalidate()
    407409        self.assertEqual([1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
     
    421423        # regression test for #12454
    422424        self._hg_init()
    423425        self._add_repository()
    424         repos = self._repomgr.get_repository('hgrepos')
     426        repos = self._get_repository()
    425427        cset = repos.get_changeset(0)
    426428        mercurial.commands.log(self.hgui, self.hgrepo, template='{date|rfc3339date}', rev=0)
    427429        self.assertEqual(self.hgui.fout.getvalue(), cset.date.isoformat())
     
    430432        # regression test for #10515
    431433        self._hg_init(data=False)
    432434        self._add_repository()
    433         repos = self._repomgr.get_repository('hgrepos')
     435        repos = self._get_repository()
    434436        self._create_commit('lunch', 'lunch/menu.txt')
    435437        self._create_commit('pasta', 'lunch/lasagna/pasta.txt')
    436438        self._hg_update('0')
     
    448450        # regression test for #13077
    449451        self._hg_init(data=False)
    450452        self._add_repository()
    451         repos = self._repomgr.get_repository('hgrepos')
     453        repos = self._get_repository()
    452454        self._create_commit('lunch', 'lunch/menu.txt')
    453455        self._create_commit('pasta', 'lunch/lasagna/pasta.txt')
    454456        self._create_commit('coke', 'lunch/lasagna/drink.txt', content='coke')
  • tracext/hg/backend.py

    changeset:   73:7746c5a35216
    branch:      1.0
    bookmark:    t13092
    tag:         tip
    user:        Jun Omae <jun66j5@gmail.com>
    date:        Thu Oct 18 21:48:59 2018 +0900
    summary:     `MercurialNode.get_history()` and `MercurialNode.get_previous()` return ancestors of the given revision (closes #13092)
    
    diff -r 545a1383b382 -r 7746c5a35216 tracext/hg/backend.py
    a b  
    11641164        pats = []
    11651165        if self.str_path:
    11661166            pats.append('path:' + self.str_path)
    1167         opts = {'rev': ['%s:0' % self.changectx.hex()]}
     1167        opts = {'rev': ['reverse(0::%s)' % self.changectx.hex()]}
    11681168        if self.isfile and self.repos.version_info < (2, 1, 1):
    11691169            opts['follow'] = True
    11701170        if arity(cmdutil.walkchangerevs) == 4:
  • tracext/hg/tests/backend.py

    diff -r 545a1383b382 -r 7746c5a35216 tracext/hg/tests/backend.py
    a b  
    4141import mercurial.util
    4242
    4343
     44nullrev = '0' * 40
     45
     46
    4447def dateformat(t):
    4548    t = to_datetime(t)  # to local timezone
    4649    return t.strftime('%Y-%m-%d %H:%M:%S')  # common legal variant
     
    211214        repos = self._get_repository()
    212215        repos.repo.invalidate()
    213216        youngest_rev = repos.youngest_rev
    214         nullrev = '0'*40
    215217        self.assertEqual(nullrev, repos.normalize_rev(youngest_rev))
    216218        self.assertEqual(nullrev, repos.normalize_rev(repos.oldest_rev))
    217219        self.assertEqual(nullrev, repos.normalize_rev(repos.normalize_rev('')))
     
    223225
    224226        node = repos.get_node('/', youngest_rev)
    225227        self.assertEqual([], list(node.get_entries()))
    226         self.assertEqual([(u'/', nullrev, 'add')], list(node.get_history()))
     228        self.assertEqual([], list(node.get_history()))
    227229        self.assertRaises(NoSuchNode, repos.get_node, '/path', youngest_rev)
    228230
    229231        req = MockRequest(self.env, path_info='/browser/hgrepos')
     
    238240        self.assertTrue(log_mod.match_request(req))
    239241        rv = log_mod.process_request(req)
    240242        self.assertEqual('revisionlog.html', rv[0])
    241         self.assertEqual([{'change': 'add', 'depth': 1, 'existing_rev': nullrev,
    242                            'path': '/', 'rev': nullrev}], rv[1]['items'])
     243        self.assertEqual([], rv[1]['items'])
     244
     245    def test_history_on_single_branch(self):
     246        self._hg_init(data=False)
     247        self._add_repository()
     248        repos = self._get_repository()
     249        self._create_commit('comment', 'file.txt', content='Line 0\n')
     250        self._create_commit('comment', 'anohter.txt', content='Anohter\n')
     251        self._create_commit('comment', 'file.txt', content='Line 2\n')
     252        self._create_commit('comment', 'file.txt', content='Line 3\n')
     253        repos.repo.invalidate()
     254        revs = [repos.normalize_rev(idx) for idx in xrange(4)]
     255        for idx in xrange(len(revs) - 1):
     256            self.assertEqual([revs[idx]], repos.parent_revs(revs[idx + 1]))
     257        self.assertEqual([nullrev], repos.parent_revs(revs[0]))
     258
     259        self.assertEqual([('/', revs[3], 'edit'), ('/', revs[2], 'edit'),
     260                          ('/', revs[1], 'edit'), ('/', revs[0], 'add')],
     261                          list(repos.get_node('/').get_history()))
     262
     263        self.assertEqual([('file.txt', revs[3], 'edit'),
     264                          ('file.txt', revs[2], 'edit'),
     265                          ('file.txt', revs[0], 'add')],
     266                          list(repos.get_node('file.txt').get_history()))
     267
     268        self.assertEqual(('/', revs[2], 'edit'),
     269                         repos.get_node('/', revs[3]).get_previous())
     270        self.assertEqual(('/', revs[1], 'edit'),
     271                         repos.get_node('/', revs[2]).get_previous())
     272        self.assertEqual(('/', revs[0], 'add'),
     273                         repos.get_node('/', revs[1]).get_previous())
     274        self.assertEqual(None, repos.get_node('/', revs[0]).get_previous())
     275
     276        self.assertEqual(('file.txt', revs[2], 'edit'),
     277                         repos.get_node('file.txt', revs[3]).get_previous())
     278        self.assertEqual(('file.txt', revs[0], 'add'),
     279                         repos.get_node('file.txt', revs[2]).get_previous())
     280
     281    def test_history_on_multi_branches(self):
     282        self._hg_init(data=False)
     283        self._add_repository()
     284        repos = self._get_repository()
     285        n_revs = 6
     286        self._create_commit('root', '.hgignore', content='')
     287        for idx in xrange(n_revs):
     288            if idx % 2 == 0:
     289                branch = 'alpha'
     290                comment = 'Alpha'
     291                content = 'Alpha %d' % idx
     292            else:
     293                branch = 'beta'
     294                comment = 'Beta'
     295                content = 'Beta %d' % idx
     296            if idx in (0, 1):
     297                self._hg_update('0')
     298                self._hg_branch(branch)
     299            else:
     300                self._hg_update(branch)
     301            self._create_commit(comment, 'file.txt', content=content)
     302        repos.repo.invalidate()
     303        revs = [repos.normalize_rev(idx) for idx in xrange(n_revs + 1)]
     304        alpha_revs = [revs[idx] for idx in (0, 2, 4, 6)]
     305        beta_revs = [revs[idx] for idx in (0, 1, 3, 5)]
     306
     307        # branch alpha
     308        self.assertEqual([alpha_revs[2]], repos.parent_revs(alpha_revs[3]))
     309        self.assertEqual([alpha_revs[1]], repos.parent_revs(alpha_revs[2]))
     310        self.assertEqual([alpha_revs[0]], repos.parent_revs(alpha_revs[1]))
     311        self.assertEqual([('/', alpha_revs[3], 'edit'),
     312                          ('/', alpha_revs[2], 'edit'),
     313                          ('/', alpha_revs[1], 'edit'),
     314                          ('/', alpha_revs[0], 'add')],
     315                         list(repos.get_node('/', alpha_revs[-1])
     316                                   .get_history()))
     317        self.assertEqual(('/', alpha_revs[1], 'edit'),
     318                         repos.get_node('/', alpha_revs[2]).get_previous())
     319        # branch beta
     320        self.assertEqual([beta_revs[2]], repos.parent_revs(beta_revs[3]))
     321        self.assertEqual([beta_revs[1]], repos.parent_revs(beta_revs[2]))
     322        self.assertEqual([beta_revs[0]], repos.parent_revs(beta_revs[1]))
     323        self.assertEqual([('/', beta_revs[3], 'edit'),
     324                          ('/', beta_revs[2], 'edit'),
     325                          ('/', beta_revs[1], 'edit'),
     326                          ('/', beta_revs[0], 'add')],
     327                         list(repos.get_node('/', beta_revs[-1])
     328                                   .get_history()))
     329        self.assertEqual(('/', beta_revs[1], 'edit'),
     330                         repos.get_node('/', beta_revs[2]).get_previous())
     331        # root commit
     332        self.assertEqual([nullrev], repos.parent_revs(revs[0]))
     333
     334        # file.txt on branch alpha
     335        actual = list(repos.get_node('file.txt', alpha_revs[-1]).get_history())
     336        self.assertEqual([('file.txt', alpha_revs[3], 'edit'),
     337                          ('file.txt', alpha_revs[2], 'edit'),
     338                          ('file.txt', alpha_revs[1], 'add')], actual)
     339        self.assertEqual(
     340            ('file.txt', alpha_revs[1], 'add'),
     341            repos.get_node('file.txt', alpha_revs[2]).get_previous())
     342
     343        # file.txt on branch beta
     344        actual = list(repos.get_node('file.txt', beta_revs[-1]).get_history())
     345        self.assertEqual([('file.txt', beta_revs[3], 'edit'),
     346                          ('file.txt', beta_revs[2], 'edit'),
     347                          ('file.txt', beta_revs[1], 'add')], actual)
     348        self.assertEqual(
     349            ('file.txt', beta_revs[1], 'add'),
     350            repos.get_node('file.txt', beta_revs[2]).get_previous())
    243351
    244352
    245353class MercurialRepositoryTestCase(BaseTestCase):
     
    352460
    353461        rev = repos.normalize_rev('0')
    354462        parents = repos.parent_revs(rev)
    355         self.assertEqual(['0'*40], parents, 'parent_revs: %r' % parents)
     463        self.assertEqual([nullrev], parents, 'parent_revs: %r' % parents)
    356464        self.assertEqual([('.hgignore', Node.FILE, Changeset.ADD, '',
    357465                           None)],
    358466                         sorted(repos.get_changeset(rev).get_changes()))