From: Joachim Kuebart <joachim.kuebart@xxxxxxxxx> Previously, the code iterated through the parent branch commits and compared each one to the target tree using diff-tree. This patch outputs the revision's tree hash along with the commit hash, thereby saving the diff-tree invocation. This results in a considerable speed-up, at least on Windows. Signed-off-by: Joachim Kuebart <joachim.kuebart@xxxxxxxxx> --- git-p4: speed up search for branch parent Previously, the code iterated through the parent branch commits and compared each one to the target tree using diff-tree. This patch outputs the revision's tree hash along with the commit hash, thereby saving the diff-tree invocation. This results in a considerable speed-up, at least on Windows. Signed-off-by: Joachim Kuebart joachim.kuebart@xxxxxxxxx Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1013%2Fjkuebart%2Fp4-faster-parent-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1013/jkuebart/p4-faster-parent-v1 Pull-Request: https://github.com/git/git/pull/1013 git-p4.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/git-p4.py b/git-p4.py index 09c9e93ac401..dbe94e6fb83b 100755 --- a/git-p4.py +++ b/git-p4.py @@ -3600,19 +3600,19 @@ def importNewBranch(self, branch, maxChange): return True def searchParent(self, parent, branch, target): - parentFound = False - for blob in read_pipe_lines(["git", "rev-list", "--reverse", + for tree in read_pipe_lines(["git", "rev-parse", + "{}^{{tree}}".format(target)]): + targetTree = tree.strip() + for blob in read_pipe_lines(["git", "rev-list", "--format=%H %T", "--no-merges", parent]): - blob = blob.strip() - if len(read_pipe(["git", "diff-tree", blob, target])) == 0: - parentFound = True + if blob[:7] == "commit ": + continue + blob = blob.strip().split(" ") + if blob[1] == targetTree: if self.verbose: - print("Found parent of %s in commit %s" % (branch, blob)) - break - if parentFound: - return blob - else: - return None + print("Found parent of %s in commit %s" % (branch, blob[0])) + return blob[0] + return None def importChanges(self, changes, origin_revision=0): cnt = 1 base-commit: 311531c9de557d25ac087c1637818bd2aad6eb3a -- gitgitgadget