Skip to content

Commit

Permalink
[git] Update references changed on the remote repo only
Browse files Browse the repository at this point in the history
When repositories are synched, the backend needs to update
the local references to the ones set on the remote repository.
The backend processed all the references, including those
up to date. This made the synchronization very slow.

With this commit, only the references that were updated on
the remote repository will be modified locally. We have
improved the performance by 2. Repositories are in sync
two or more times than before.

Signed-off-by: Santiago Dueñas <[email protected]>
  • Loading branch information
sduenas committed Dec 3, 2024
1 parent f16b29d commit 204fad4
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
6 changes: 6 additions & 0 deletions perceval/backends/core/git.py
Original file line number Diff line number Diff line change
Expand Up @@ -1304,6 +1304,8 @@ def _update_references(self, refs):
self._update_ref(old_ref, delete=True)

# Update new references
current_refs = {ref.refname: ref.hash for ref in self._discover_refs()}

for new_ref in refs:
refname = new_ref.refname

Expand All @@ -1315,6 +1317,10 @@ def _update_references(self, refs):
logger.debug("Reference %s not needed; ignored for updating in sync process",
refname)
continue
elif refname in current_refs and new_ref.hash == current_refs[refname]:
logger.debug("Reference %s already up to date in sync process",
refname)
continue
else:
self._update_ref(new_ref)

Expand Down
14 changes: 14 additions & 0 deletions releases/unreleased/git-sync-perfomance-improved.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
title: Git sync improved for `--latest-items` flag
category: performance
author: Santiago Dueñas <[email protected]>
issue: null
notes: >
The speed updating a git repository when `--lates-items`
is set was very poor. The main problem was when the
references were updated to the new hashes. All the
active refs on the repository were modified, even when
they were up-to-date. Now, only references updated
on the remote repository are modified on the local one.
Repositories are synched 2 times faster than before.

0 comments on commit 204fad4

Please sign in to comment.