1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-06-09 17:36:20 +02:00

Merge branch 'jk/p4-locate-branch-point-optim' into next

"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
This commit is contained in:
Junio C Hamano 2021-05-07 12:49:31 +09:00
commit 0fa60c3af3
2 changed files with 12 additions and 11 deletions

View File

@ -3600,19 +3600,18 @@ 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",
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

View File

@ -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 &&