[Patchew-devel] [PATCH v2] applier: synchronize tags lazily into the cache

Paolo Bonzini pbonzini at redhat.com
Sun Jan 13 15:29:17 UTC 2019


Every time the patchew's applier mode is restarted, it repopulates a cache
of git repositories.  For QEMU, the git repo has thousands of tags
which take a very long time to create.  Synchronize refs/heads/* only
(--mirror=fetch would synchronize all of refs/*); the tags are
only used by patchew-cli when a Based-on trailer is found, and can
be populated lazily.

Signed-off-by: Paolo Bonzini <pbonzini at redhat.com>
---
	v1->v2: always fetch refs/heads, so that HEAD contains a valid
		reference

 patchew-cli | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/patchew-cli b/patchew-cli
index 5a39f79..388d197 100755
--- a/patchew-cli
+++ b/patchew-cli
@@ -43,9 +43,18 @@ def git_clone_repo(clone, remote, head, logf, checkout=True, recursive=False):
                     cwd=cache_repo,
                     stdout=subprocess.PIPE,
                     stderr=subprocess.PIPE)
-    subprocess.check_call(["git", "remote", "add", "-f", "--mirror=fetch",
+    subprocess.check_call(["git", "remote", "add",
                           remote_name, remote], cwd=cache_repo,
                           stdout=logf, stderr=logf)
+    subprocess.check_call(["git", "config",
+                           "remote.%s.fetch" % (remote_name,),
+                           "+refs/heads/*:refs/heads/*"], cwd=cache_repo,
+                          stdout=logf, stderr=logf)
+    subprocess.check_call(["git", "fetch", remote_name], cwd=cache_repo,
+                          stdout=logf, stderr=logf)
+    if head.startswith("refs/tags/"):
+        subprocess.check_call(["git", "fetch", remote_name, "+%s:%s" % (head, head)],
+                              cwd=cache_repo, stdout=logf, stderr=logf)
     clone_cmd = ["git", "clone", "-q"]
     if recursive:
         clone_cmd += ["--recursive"]
-- 
2.20.1




More information about the Patchew-devel mailing list