Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_fetch_branch(self):
"""Test whether commits are fetched from a Git repository for a given branch"""
new_path = os.path.join(self.tmp_path, 'newgit')
from_date = datetime.datetime(2014, 2, 11, 22, 7, 49)
git = Git(self.git_path, new_path)
# Let's fetch master
commits = [commit for commit in git.fetch(branches=['master'])]
expected = ['bc57a9209f096a130dcc5ba7089a8663f758a703',
'87783129c3f00d2c81a3a8e585eb86a47e39891a',
'7debcf8a2f57f86663809c58b5c07a398be7674c',
'c0d66f92a95e31c77be08dc9d0f11a16715d1885',
'c6ba8f7a1058db3e6b4bc6f1090e932b107605fb',
'589bb080f059834829a2a5955bebfd7c2baa110a',
'ce8e0b86a1e9877f42fe9453ede418519115f367',
'51a3b654f252210572297f47597b31527c475fb8',
'456a68ee1407a77f3e804a30dff245bb6c6b872f']
self.assertEqual(len(commits), len(expected))
for x in range(len(commits)):
def test_fetch_latest_items(self):
"""Test whether latest commits are fetched from a Git repository"""
origin_path = os.path.join(self.tmp_repo_path, 'gittest')
editable_path = os.path.join(self.tmp_path, 'editgit')
new_path = os.path.join(self.tmp_path, 'newgit')
new_file = os.path.join(editable_path, 'newfile')
shutil.copytree(origin_path, editable_path)
git = Git(editable_path, new_path)
commits = [commit for commit in git.fetch(latest_items=True)]
# Count the number of commits before adding some new
expected = [('bc57a9209f096a130dcc5ba7089a8663f758a703', 1344965413.0),
('87783129c3f00d2c81a3a8e585eb86a47e39891a', 1344965535.0),
('7debcf8a2f57f86663809c58b5c07a398be7674c', 1344965607.0),
('c0d66f92a95e31c77be08dc9d0f11a16715d1885', 1344965702.0),
('c6ba8f7a1058db3e6b4bc6f1090e932b107605fb', 1344966351.0),
('589bb080f059834829a2a5955bebfd7c2baa110a', 1344967441.0),
('ce8e0b86a1e9877f42fe9453ede418519115f367', 1392185269.0),
('51a3b654f252210572297f47597b31527c475fb8', 1392185366.0),
('456a68ee1407a77f3e804a30dff245bb6c6b872f', 1392185439.0)]
self.assertEqual(len(commits), len(expected))
for x in range(len(commits)):
for x in range(len(commits)):
expected_uuid = uuid(self.git_path, expected[x][0])
commit = commits[x]
self.assertEqual(commit['data']['commit'], expected[x][0])
self.assertEqual(commit['origin'], self.git_path)
self.assertEqual(commit['uuid'], expected_uuid)
self.assertEqual(commit['updated_on'], expected[x][1])
self.assertEqual(commit['category'], 'commit')
self.assertEqual(commit['tag'], self.git_path)
# Test it using a datetime that includes the timezone
from_date = datetime.datetime(2012, 8, 14, 7, 34, 00,
tzinfo=dateutil.tz.tzoffset(None, -36000))
to_date = datetime.datetime(2012, 8, 14, 14, 30, 00,
tzinfo=dateutil.tz.tzoffset(None, -36000))
git = Git(self.git_path, new_path)
commits = [commit for commit in git.fetch(from_date=from_date, to_date=to_date)]
self.assertEqual(len(commits), len(expected))
for x in range(len(commits)):
expected_uuid = uuid(self.git_path, expected[x][0])
commit = commits[x]
self.assertEqual(commit['data']['commit'], expected[x][0])
self.assertEqual(commit['origin'], self.git_path)
self.assertEqual(commit['uuid'], expected_uuid)
self.assertEqual(commit['updated_on'], expected[x][1])
self.assertEqual(commit['category'], 'commit')
self.assertEqual(commit['tag'], self.git_path)
shutil.rmtree(new_path)
def test_initialization(self):
"""Test whether attributes are initializated"""
git = Git('http://example.com', self.git_path, tag='test')
self.assertEqual(git.uri, 'http://example.com')
self.assertEqual(git.gitpath, self.git_path)
self.assertEqual(git.origin, 'http://example.com')
self.assertEqual(git.tag, 'test')
# When tag is empty or None it will be set to
# the value in uri
git = Git('http://example.com', self.git_path)
self.assertEqual(git.origin, 'http://example.com')
self.assertEqual(git.tag, 'http://example.com')
git = Git('http://example.com', self.git_path, tag='')
self.assertEqual(git.origin, 'http://example.com')
self.assertEqual(git.tag, 'http://example.com')
def test_fetch_empty_log(self):
"""Test whether it parsers an empty log"""
new_path = os.path.join(self.tmp_path, 'newgit')
from_date = datetime.datetime(2020, 1, 1, 1, 1, 1)
git = Git(self.git_path, new_path)
commits = [commit for commit in git.fetch(from_date=from_date)]
self.assertListEqual(commits, [])
to_date = datetime.datetime(1970, 1, 1, 1, 1, 1)
git = Git(self.git_path, new_path)
commits = [commit for commit in git.fetch(to_date=to_date)]
self.assertListEqual(commits, [])
shutil.rmtree(new_path)
"""Test whether attributes are initializated"""
git = Git('http://example.com', self.git_path, tag='test')
self.assertEqual(git.uri, 'http://example.com')
self.assertEqual(git.gitpath, self.git_path)
self.assertEqual(git.origin, 'http://example.com')
self.assertEqual(git.tag, 'test')
# When tag is empty or None it will be set to
# the value in uri
git = Git('http://example.com', self.git_path)
self.assertEqual(git.origin, 'http://example.com')
self.assertEqual(git.tag, 'http://example.com')
git = Git('http://example.com', self.git_path, tag='')
self.assertEqual(git.origin, 'http://example.com')
self.assertEqual(git.tag, 'http://example.com')
def test_fetch_from_file(self):
"""Test whether commits are fetched from a Git log file"""
git = Git('http://example.com.git', os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data/git/git_log.txt'))
commits = [commit for commit in git.fetch()]
expected = [('456a68ee1407a77f3e804a30dff245bb6c6b872f', 1392185439.0),
('51a3b654f252210572297f47597b31527c475fb8', 1392185366.0),
('ce8e0b86a1e9877f42fe9453ede418519115f367', 1392185269.0),
('589bb080f059834829a2a5955bebfd7c2baa110a', 1344967441.0),
('c6ba8f7a1058db3e6b4bc6f1090e932b107605fb', 1344966351.0),
('c0d66f92a95e31c77be08dc9d0f11a16715d1885', 1344965702.0),
('7debcf8a2f57f86663809c58b5c07a398be7674c', 1344965607.0),
('87783129c3f00d2c81a3a8e585eb86a47e39891a', 1344965535.0),
('bc57a9209f096a130dcc5ba7089a8663f758a703', 1344965413.0),
('49345fe87bd1dfad7e682f6554f7472c5576a8c7', 1515508249.0)]
self.assertEqual(len(commits), len(expected))
for x in range(len(commits)):
def _init_repository(self):
logger.info("Initializing importer for repository [%s]",
self.object.url)
self.repo_path = self._get_checkout_path()
self.backend = git.Git(self.object.url, self.repo_path)
from ._version import __version__
CATEGORY_GRAAL = 'graal'
DEFAULT_WORKTREE_PATH = '/tmp/worktrees/'
GIT_EXEC_PATH = '/usr/bin/git'
logger = logging.getLogger(__name__)
class GraalError(BaseError):
"""Generic error for graal backends"""
message = "%(cause)s"
class Graal(Git):
"""Generic Repository AnALyzer backend.
This class inherits from Git backend, thus it fetches the commits
from a local Git repository and enables to add the result of
the analysis within the `analysis` attribute of the Perceval
item returned. To initialize this class, you have to provide
the local path of a Git repository (URI), a value for
`git_path`, where the repository will be mirrored, and the path where
a working tree will be created. The working tree is added to the
mirror and removed after the analysis is over.
For each target commit (by default all of them), a checkout version
of the repository is created at `worktreepath` to ease the analysis.
Note that you can customize the filter to select commits, by
redefining the method `_filter_commit(self, commit)`.
Furthermore, you can plug your analysis by redefining the