Source code for pkgcore.sync.git
__all__ = ("git_syncer",)
import os
from . import base
[docs]
class git_syncer(base.VcsSyncer):
binary = "git"
supported_uris = (
("git://", 5),
("git+", 5),
("git@", 5),
)
supported_protocols = ("http://", "https://", "git://", "git@")
supported_exts = (".git",)
[docs]
@classmethod
def is_usable_on_filepath(cls, path):
git_path = os.path.join(path, ".git")
if cls.disabled or not os.path.isdir(git_path):
return None
# defer to git-svn plugin
if os.path.isdir(os.path.join(git_path, "svn")):
return None
return (cls._rewrite_uri_from_stat(git_path, "git://"),)
[docs]
@classmethod
def parse_uri(cls, raw_uri):
if not raw_uri.startswith("git+") and not raw_uri.startswith("git://"):
if raw_uri.startswith(cls.supported_protocols) and raw_uri.endswith(
cls.supported_exts
):
return raw_uri
raise base.UriError(raw_uri, "doesn't start with git+ or git://")
if raw_uri.startswith("git+"):
if raw_uri.startswith("git+:"):
raise base.UriError(
raw_uri, "need to specify the sub protocol if using git+"
)
return raw_uri[4:]
return raw_uri
def _initial_pull(self):
return [self.binary_path, "clone", self.uri, self.basedir]
def _update_existing(self):
return [self.binary_path, "pull"]