From 83bb93dc5e2e907c939af41fbd03d30eca6c9fe9 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 19 2018 08:48:29 +0000 Subject: Fix diff a non-empty repo against an empty one Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/lib/git.py b/pagure/lib/git.py index 5df021c..aa54fcf 100644 --- a/pagure/lib/git.py +++ b/pagure/lib/git.py @@ -1528,7 +1528,7 @@ def get_diff_info(repo_obj, orig_repo, branch_from, branch_to, prid=None): repo_obj = orig_repo if not repo_obj.is_empty and not orig_repo.is_empty: - _log.info('Pulling into an non-empty repo') + _log.info('pagure.lib.get_diff_info: Pulling into a non-empty repo') if branch: orig_commit = orig_repo[branch.get_object().hex] main_walker = orig_repo.walk( @@ -1583,11 +1583,13 @@ def get_diff_info(repo_obj, orig_repo, branch_from, branch_to, prid=None): repo_obj.revparse_single(diff_commits[0].oid.hex) ) elif first_commit.oid.hex == diff_commits[0].oid.hex: - _log.info('First commit is also the last commit') + _log.info( + 'pagure.lib.get_diff_info: First commit is also the last ' + 'commit') diff = diff_commits[0].tree.diff_to_tree(swap=True) elif orig_repo.is_empty and not repo_obj.is_empty: - _log.info('Pulling into an empty repo') + _log.info('pagure.lib.get_diff_info: Pulling into an empty repo') if 'master' in repo_obj.listall_branches(): repo_commit = repo_obj[repo_obj.head.target] else: @@ -1606,6 +1608,10 @@ def get_diff_info(repo_obj, orig_repo, branch_from, branch_to, prid=None): 'request with' ) + _log.info( + 'pagure.lib.get_diff_info: diff_commits length: %s', len(diff_commits)) + _log.info('pagure.lib.get_diff_info: original commit: %s', orig_commit) + return(diff, diff_commits, orig_commit) diff --git a/pagure/ui/fork.py b/pagure/ui/fork.py index 5cd6be6..84ab6d4 100644 --- a/pagure/ui/fork.py +++ b/pagure/ui/fork.py @@ -250,10 +250,22 @@ def request_pull(repo, requestid, username=None, namespace=None): pass if diff_commits: - diff = repo_obj.diff( - repo_obj.revparse_single(diff_commits[-1].parents[0].oid.hex), - repo_obj.revparse_single(diff_commits[0].oid.hex) - ) + # Ensure the first commit in the PR as a parent, otherwise + # point to it + start = diff_commits[-1].oid.hex + if diff_commits[-1].parents: + start = diff_commits[-1].parents[0].oid.hex + + # If the start and the end commits are the same, it means we are, + # dealing with one commit that has no parent, so just diff that + # one commit + if start == diff_commits[0].oid.hex: + diff = diff_commits[0].tree.diff_to_tree(swap=True) + else: + diff = repo_obj.diff( + repo_obj.revparse_single(start), + repo_obj.revparse_single(diff_commits[0].oid.hex) + ) else: try: diff_commits, diff = pagure.lib.git.diff_pull_request(