Blame tests/test_pagure_lib_git_get_tags_objects.py

Clement Verna ce25e9
# -*- coding: utf-8 -*-
Clement Verna ce25e9
Clement Verna ce25e9
"""
Clement Verna ce25e9
 (c) 2016 - Copyright Red Hat Inc
Clement Verna ce25e9
Clement Verna ce25e9
 Authors:
Clement Verna ce25e9
   Clement Verna <cverna@tutanota.com></cverna@tutanota.com>
Clement Verna ce25e9
Clement Verna ce25e9
"""
Clement Verna ce25e9
Pierre-Yves Chibon 67d1cc
from __future__ import unicode_literals, absolute_import
Aurélien Bompard dcf6f6
Clement Verna ce25e9
import unittest
Clement Verna ce25e9
import sys
Clement Verna ce25e9
import os
Clement Verna 40ad40
import time
Clement Verna ce25e9
Clement Verna ce25e9
import pygit2
Clement Verna ce25e9
Pierre-Yves Chibon 73d120
sys.path.insert(
Pierre-Yves Chibon 73d120
    0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")
Pierre-Yves Chibon 73d120
)
Clement Verna ce25e9
Clement Verna ce25e9
import pagure.lib.git
Pierre-Yves Chibon 930073
import pagure.lib.query
Clement Verna ce25e9
import tests
Clement Verna ce25e9
Clement Verna ce25e9
Clement Verna ce25e9
def get_tag_name(tags):
Clement Verna ce25e9
    """ Return a list of the tag names """
Clement Verna ce25e9
    output = []
Clement Verna ce25e9
    for tag in tags:
Pierre-Yves Chibon 73d120
        output.append(tag["tagname"])
Clement Verna ce25e9
    return output
Clement Verna ce25e9
Clement Verna ce25e9
Jeremy Cline 20109f
def add_repo_tag(git_dir, repo, tags, repo_name):
Clement Verna ce25e9
    """ Use a list to create multiple tags on a git repo """
Clement Verna 40ad40
    for tag in reversed(tags):
Clement Verna 40ad40
        time.sleep(1)
Clement Verna 40ad40
        tests.add_commit_git_repo(
Pierre-Yves Chibon 73d120
            os.path.join(git_dir, "repos", repo_name), ncommits=1
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 73d120
        first_commit = repo.revparse_single("HEAD")
Pierre-Yves Chibon 73d120
        tagger = pygit2.Signature("Alice Doe", "adoe@example.com", 12347, 0)
Clement Verna ce25e9
        repo.create_tag(
Pierre-Yves Chibon 73d120
            tag,
Pierre-Yves Chibon 73d120
            first_commit.oid.hex,
Pierre-Yves Chibon 73d120
            pygit2.GIT_OBJ_COMMIT,
Pierre-Yves Chibon 73d120
            tagger,
Pierre-Yves Chibon 73d120
            "Release " + tag,
Pierre-Yves Chibon 73d120
        )
Clement Verna ce25e9
Clement Verna ce25e9
Clement Verna ce25e9
class PagureLibGitGetTagstests(tests.Modeltests):
Clement Verna ce25e9
    def test_get_git_tags_objects(self):
Clement Verna ce25e9
        """ Test the get_git_tags_objects method of pagure.lib.git. """
Clement Verna ce25e9
        tests.create_projects(self.session)
Pierre-Yves Chibon 73d120
        tests.create_projects_git(os.path.join(self.path, "repos"), bare=True)
Pierre-Yves Chibon 73d120
        project = pagure.lib.query._get_project(self.session, "test")
Clement Verna ebd4f9
Clement Verna ebd4f9
        # Case 1 - Empty repo with no tags
Clement Verna ebd4f9
        exp = []
Clement Verna ebd4f9
        tags = pagure.lib.git.get_git_tags_objects(project)
Clement Verna ebd4f9
        self.assertEqual(exp, get_tag_name(tags))
Clement Verna ebd4f9
Pierre-Yves Chibon 73d120
        tests.add_readme_git_repo(
Pierre-Yves Chibon 73d120
            os.path.join(os.path.join(self.path, "repos"), "test.git")
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 73d120
        repo = pygit2.Repository(
Pierre-Yves Chibon 73d120
            os.path.join(os.path.join(self.path, "repos"), "test.git")
Pierre-Yves Chibon 73d120
        )
Clement Verna ce25e9
Clement Verna ebd4f9
        # Case 2 - Repo with one commit and no tags
Clement Verna 40ad40
        exp = []
Clement Verna ce25e9
        tags = pagure.lib.git.get_git_tags_objects(project)
Clement Verna ce25e9
        self.assertEqual(exp, get_tag_name(tags))
Clement Verna ce25e9
Clement Verna ebd4f9
        # Case 3 - Simple sort
Pierre-Yves Chibon 73d120
        exp = [
Pierre-Yves Chibon 73d120
            "0.1.0",
Pierre-Yves Chibon 73d120
            "test-0.0.21",
Pierre-Yves Chibon 73d120
            "0.0.12-beta",
Pierre-Yves Chibon 73d120
            "0.0.12-alpha",
Pierre-Yves Chibon 73d120
            "0.0.12",
Pierre-Yves Chibon 73d120
            "0.0.11",
Pierre-Yves Chibon 73d120
            "0.0.3",
Pierre-Yves Chibon 73d120
            "foo-0.0.2",
Pierre-Yves Chibon 73d120
            "0.0.1",
Pierre-Yves Chibon 73d120
        ]
Pierre-Yves Chibon 73d120
        add_repo_tag(self.path, repo, exp, "test.git")
Clement Verna ce25e9
        tags = pagure.lib.git.get_git_tags_objects(project)
Clement Verna ce25e9
        self.assertEqual(exp, get_tag_name(tags))
Clement Verna ce25e9
Clement Verna ebd4f9
        # Case 4 - Sorting with different splitting characters
Pierre-Yves Chibon 73d120
        project = pagure.lib.query.get_authorized_project(
Pierre-Yves Chibon 73d120
            self.session, "test2"
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 73d120
        tests.add_readme_git_repo(
Pierre-Yves Chibon 73d120
            os.path.join(os.path.join(self.path, "repos"), "test2.git")
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 73d120
        repo = pygit2.Repository(
Pierre-Yves Chibon 73d120
            os.path.join(os.path.join(self.path, "repos"), "test2.git")
Pierre-Yves Chibon 73d120
        )
Pierre-Yves Chibon 73d120
Pierre-Yves Chibon 73d120
        exp = [
Pierre-Yves Chibon 73d120
            "1.0-0_2",
Pierre-Yves Chibon 73d120
            "1.0-0_1",
Pierre-Yves Chibon 73d120
            "0.1-1_0",
Pierre-Yves Chibon 73d120
            "0.1-0_0",
Pierre-Yves Chibon 73d120
            "0.0-2_0",
Pierre-Yves Chibon 73d120
            "0.0-1_34",
Pierre-Yves Chibon 73d120
            "0.0-1_11",
Pierre-Yves Chibon 73d120
            "0.0-1_3",
Pierre-Yves Chibon 73d120
            "0.0-1_2",
Pierre-Yves Chibon 73d120
            "0.0-1_1",
Pierre-Yves Chibon 73d120
        ]
Pierre-Yves Chibon 73d120
        add_repo_tag(self.path, repo, exp, "test2.git")
Clement Verna ce25e9
        tags = pagure.lib.git.get_git_tags_objects(project)
Clement Verna ce25e9
        self.assertEqual(exp, get_tag_name(tags))
Clement Verna ce25e9
Clement Verna ce25e9
Pierre-Yves Chibon 73d120
if __name__ == "__main__":
Pierre-Yves Chibon 393f31
    unittest.main(verbosity=2)