diff --git a/perceval/backends/core/git.py b/perceval/backends/core/git.py index 3b962353a..a2b4a9180 100644 --- a/perceval/backends/core/git.py +++ b/perceval/backends/core/git.py @@ -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 @@ -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) diff --git a/releases/unreleased/git-sync-perfomance-improved.yml b/releases/unreleased/git-sync-perfomance-improved.yml new file mode 100644 index 000000000..abc206a81 --- /dev/null +++ b/releases/unreleased/git-sync-perfomance-improved.yml @@ -0,0 +1,14 @@ +--- +title: Git sync improved for `--latest-items` flag +category: performance +author: Santiago DueƱas +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. +