From 990b72d14e69d900ab6cc9ab56bb65fdb8907d3e Mon Sep 17 00:00:00 2001 From: Clement Verna Date: May 26 2016 08:16:02 +0000 Subject: [PATCH 1/3] Updated test in order to TDD get_revs_between --- diff --git a/tests/test_pagure_lib_git.py b/tests/test_pagure_lib_git.py index a461340..ebadbce 100644 --- a/tests/test_pagure_lib_git.py +++ b/tests/test_pagure_lib_git.py @@ -1260,9 +1260,7 @@ index 0000000..60f7480 to_hash = '0' output1 = pagure.lib.git.get_revs_between( to_hash, from_hash, gitrepo) - # test fails with current version of get_revs_between, if BASE = 0 - # on the master branch get_revs_between returns an empty list. - # self.assertEqual(output1, [from_hash]) + self.assertEqual(output1, [from_hash]) # Case 2, get revs between two commits (to_hash, from_hash) to_hash = output[0].replace("'", '') From f202e4b2efdfa55dd8ad2d1ef0ba835e93f6acb1 Mon Sep 17 00:00:00 2001 From: Clement Verna Date: May 26 2016 08:16:02 +0000 Subject: [PATCH 2/3] Use the refname given by git-receive-pack in get_revs_between so that we can find on which branch we are working. If branch is the same as the HEAD then return the full history --- diff --git a/pagure/lib/git.py b/pagure/lib/git.py index 6a722a0..7c10aef 100644 --- a/pagure/lib/git.py +++ b/pagure/lib/git.py @@ -844,7 +844,7 @@ def read_git_lines(args, abspath, keepends=False, **kw): ).splitlines(keepends) -def get_revs_between(oldrev, newrev, abspath, forced=False): +def get_revs_between(oldrev, newrev, abspath, refname, forced=False): """ Yield revisions between HEAD and BASE. """ cmd = ['rev-list', '%s...%s' % (oldrev, newrev)] @@ -856,6 +856,8 @@ def get_revs_between(oldrev, newrev, abspath, forced=False): elif set(oldrev) == set('0') or set(oldrev) == set('^0'): head = get_default_branch(abspath) cmd = ['rev-list', '%s' % newrev, '^%s' % head] + if head in refname: + cmd = ['rev-list', '%s' % newrev] return pagure.lib.git.read_git_lines(cmd, abspath) diff --git a/tests/test_pagure_lib_git.py b/tests/test_pagure_lib_git.py index ebadbce..6eb452b 100644 --- a/tests/test_pagure_lib_git.py +++ b/tests/test_pagure_lib_git.py @@ -1259,18 +1259,18 @@ index 0000000..60f7480 # Case 1, repo BASE is null and HEAD is equal to from_hash to_hash = '0' output1 = pagure.lib.git.get_revs_between( - to_hash, from_hash, gitrepo) + to_hash, from_hash, gitrepo, 'refs/heads/master') self.assertEqual(output1, [from_hash]) # Case 2, get revs between two commits (to_hash, from_hash) to_hash = output[0].replace("'", '') output2 = pagure.lib.git.get_revs_between( - to_hash, from_hash, gitrepo) + to_hash, from_hash, gitrepo, 'refs/heads/master') self.assertEqual(output2, [to_hash]) # Case 3, get revs between two commits (from_hash, to_hash) output3 = pagure.lib.git.get_revs_between( - from_hash, to_hash, gitrepo) + from_hash, to_hash, gitrepo, 'refs/heads/master') self.assertEqual(output3, [to_hash]) # Case 4, get revs between two commits on two different branches @@ -1309,7 +1309,7 @@ index 0000000..60f7480 shutil.rmtree(newgitrepo) output4 = pagure.lib.git.get_revs_between( - '0', 'feature', gitrepo) + '0', branch_commit.oid.hex, gitrepo, 'refs/heads/feature') self.assertEqual(output4, [branch_commit.oid.hex]) def test_get_author(self): From bdd561a7291146452e05fd99fb6eb4fdf78134e7 Mon Sep 17 00:00:00 2001 From: Clement Verna Date: May 26 2016 08:16:02 +0000 Subject: [PATCH 3/3] Updated call to get_revs_between with the new refname argument --- diff --git a/pagure/hooks/files/fedmsg_hook.py b/pagure/hooks/files/fedmsg_hook.py index 6616fb2..9a1d73c 100755 --- a/pagure/hooks/files/fedmsg_hook.py +++ b/pagure/hooks/files/fedmsg_hook.py @@ -49,7 +49,7 @@ for line in sys.stdin.readlines(): oldrev = base[0] revs = pagure.lib.git.get_revs_between( - oldrev, newrev, abspath, forced=forced) + oldrev, newrev, abspath, refname, forced=forced) project_name = pagure.lib.git.get_repo_name(abspath) username = pagure.lib.git.get_username(abspath) project = pagure.lib.get_project(pagure.SESSION, project_name, username) diff --git a/pagure/hooks/files/pagure_block_unsigned.py b/pagure/hooks/files/pagure_block_unsigned.py index ecc1ffe..c9bee63 100755 --- a/pagure/hooks/files/pagure_block_unsigned.py +++ b/pagure/hooks/files/pagure_block_unsigned.py @@ -47,7 +47,8 @@ def run_as_pre_receive_hook(): "hook to block unsigned commits" return - commits = pagure.lib.git.get_revs_between(oldrev, newrev, abspath) + commits = pagure.lib.git.get_revs_between( + oldrev, newrev, abspath, refname) for commit in commits: if pagure.APP.config.get('HOOK_DEBUG', False): print 'Processing commit: %s' % commit diff --git a/pagure/hooks/files/pagure_hook.py b/pagure/hooks/files/pagure_hook.py index 53bcd8f..16963ec 100755 --- a/pagure/hooks/files/pagure_hook.py +++ b/pagure/hooks/files/pagure_hook.py @@ -180,7 +180,7 @@ def run_as_post_receive_hook(): return generate_revision_change_log( - pagure.lib.git.get_revs_between(oldrev, newrev, abspath)) + pagure.lib.git.get_revs_between(oldrev, newrev, abspath, refname)) if pagure.APP.config.get('HOOK_DEBUG', False): print 'repo:', pagure.lib.git.get_repo_name(abspath) diff --git a/pagure/hooks/files/pagure_hook_requests.py b/pagure/hooks/files/pagure_hook_requests.py index ccb69fc..10d6a3f 100755 --- a/pagure/hooks/files/pagure_hook_requests.py +++ b/pagure/hooks/files/pagure_hook_requests.py @@ -62,7 +62,7 @@ def run_as_post_receive_hook(): return tmp = set(get_files_to_load( - pagure.lib.git.get_revs_between(oldrev, newrev, abspath))) + pagure.lib.git.get_revs_between(oldrev, newrev, abspath, refname))) file_list = file_list.union(tmp) reponame = pagure.lib.git.get_repo_name(abspath) diff --git a/pagure/hooks/files/pagure_hook_tickets.py b/pagure/hooks/files/pagure_hook_tickets.py index 08b8b53..1f5dec0 100755 --- a/pagure/hooks/files/pagure_hook_tickets.py +++ b/pagure/hooks/files/pagure_hook_tickets.py @@ -62,7 +62,7 @@ def run_as_post_receive_hook(): return tmp = set(get_files_to_load( - pagure.lib.git.get_revs_between(oldrev, newrev, abspath))) + pagure.lib.git.get_revs_between(oldrev, newrev, abspath, refname))) file_list = file_list.union(tmp) reponame = pagure.lib.git.get_repo_name(abspath)