diff options
author | Junio C Hamano <gitster@pobox.com> | 2021-05-13 23:26:08 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-05-13 23:26:08 (GMT) |
commit | e289f681ede1aad2ded33e76518bdc80064f3c16 (patch) | |
tree | cca122a152a052b80978db87a835e08b40a31aa8 | |
parent | eede71149ec0e03eeb4d469e18d16ff4def1cd35 (diff) | |
parent | 6b79818bfbd39a5d41d15003375a9f382f70ad0e (diff) | |
download | git-e289f681ede1aad2ded33e76518bdc80064f3c16.zip git-e289f681ede1aad2ded33e76518bdc80064f3c16.tar.gz git-e289f681ede1aad2ded33e76518bdc80064f3c16.tar.bz2 |
Merge branch 'jk/p4-locate-branch-point-optim'
"git p4" learned to find branch points more efficiently.
* jk/p4-locate-branch-point-optim:
git-p4: speed up search for branch parent
git-p4: ensure complex branches are cloned correctly
-rwxr-xr-x | git-p4.py | 21 | ||||
-rwxr-xr-x | t/t9801-git-p4-branch.sh | 2 |
2 files changed, 12 insertions, 11 deletions
@@ -3600,19 +3600,18 @@ class P4Sync(Command, P4UserMap): return True def searchParent(self, parent, branch, target): - parentFound = False - for blob in read_pipe_lines(["git", "rev-list", "--reverse", + targetTree = read_pipe(["git", "rev-parse", + "{}^{{tree}}".format(target)]).strip() + for line 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 line.startswith("commit "): + continue + commit, tree = line.strip().split(" ") + if tree == 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, commit)) + return commit + return None def importChanges(self, changes, origin_revision=0): cnt = 1 diff --git a/t/t9801-git-p4-branch.sh b/t/t9801-git-p4-branch.sh index ff94c3f..50a6f8b 100755 --- a/t/t9801-git-p4-branch.sh +++ b/t/t9801-git-p4-branch.sh @@ -294,11 +294,13 @@ test_expect_success 'git p4 clone complex branches' ' test_path_is_file file3 && grep update file2 && git reset --hard p4/depot/branch4 && + git diff-tree --quiet HEAD && test_path_is_file file1 && test_path_is_file file2 && test_path_is_missing file3 && ! grep update file2 && git reset --hard p4/depot/branch5 && + git diff-tree --quiet HEAD && test_path_is_file file1 && test_path_is_file file2 && test_path_is_file file3 && |