| |
@@ -21,6 +21,7 @@
|
| |
import operator
|
| |
import re
|
| |
import pygit2
|
| |
+ import subprocess
|
| |
import os
|
| |
|
| |
import six
|
| |
@@ -540,6 +541,49 @@
|
| |
self.fullname,
|
| |
)
|
| |
|
| |
+ def _repospanner_clone(self, repotype, set_config, target):
|
| |
+ """ Create a clone of a repoSpanner repo to filesystem.
|
| |
+
|
| |
+ """
|
| |
+ repourl, regioninfo = self.repospanner_repo_info(repotype)
|
| |
+
|
| |
+ command = [
|
| |
+ "git",
|
| |
+ "-c",
|
| |
+ "protocol.ext.allow=always",
|
| |
+ "clone",
|
| |
+ "ext::%s %s"
|
| |
+ % (
|
| |
+ pagure_config["REPOBRIDGE_BINARY"],
|
| |
+ self._repospanner_repo_name(repotype),
|
| |
+ ),
|
| |
+ target,
|
| |
+ ]
|
| |
+ environ = os.environ.copy()
|
| |
+ environ.update(
|
| |
+ {
|
| |
+ "USER": "pagure",
|
| |
+ "REPOBRIDGE_CONFIG": ":environment:",
|
| |
+ "REPOBRIDGE_BASEURL": regioninfo["url"],
|
| |
+ "REPOBRIDGE_CA": regioninfo["ca"],
|
| |
+ "REPOBRIDGE_CERT": regioninfo["push_cert"]["cert"],
|
| |
+ "REPOBRIDGE_KEY": regioninfo["push_cert"]["key"],
|
| |
+ }
|
| |
+ )
|
| |
+ with open(os.devnull, "w") as devnull:
|
| |
+ subprocess.check_call(
|
| |
+ command, stdout=devnull, stderr=subprocess.STDOUT, env=environ
|
| |
+ )
|
| |
+
|
| |
+ repo = pygit2.Repository(target)
|
| |
+ if set_config:
|
| |
+ repo.config["repospanner.url"] = repourl
|
| |
+ repo.config["repospanner.cert"] = regioninfo["push_cert"]["cert"]
|
| |
+ repo.config["repospanner.key"] = regioninfo["push_cert"]["key"]
|
| |
+ repo.config["repospanner.cacert"] = regioninfo["ca"]
|
| |
+ repo.config["repospanner.enabled"] = True
|
| |
+ return repo
|
| |
+
|
| |
def repopath(self, repotype):
|
| |
""" Return the full repository path of the git repo on the filesystem.
|
| |
|
| |
@@ -552,16 +596,7 @@
|
| |
pagure_config["REPOSPANNER_PSEUDO_FOLDER"], repotype, self.path
|
| |
)
|
| |
if not os.path.exists(pseudopath):
|
| |
- repourl, regioninfo = self.repospanner_repo_info(repotype)
|
| |
- fake = pygit2.init_repository(pseudopath, bare=True)
|
| |
- fake.config["repospanner.url"] = repourl
|
| |
- fake.config["repospanner.cert"] = regioninfo["push_cert"][
|
| |
- "cert"
|
| |
- ]
|
| |
- fake.config["repospanner.key"] = regioninfo["push_cert"]["key"]
|
| |
- fake.config["repospanner.cacert"] = regioninfo["ca"]
|
| |
- fake.config["repospanner.enabled"] = True
|
| |
- del fake
|
| |
+ self._repospanner_clone(repotype, True, pseudopath)
|
| |
return pseudopath
|
| |
|
| |
maindir = None
|
| |
This is on top of #3883.