コード例 #1
0
ファイル: githosting.py プロジェクト: pombredanne/launchpad-3
 def setProperties(self, path, **props):
     """See `IGitHostingClient`."""
     try:
         self._patch("/repo/%s" % path, json=props)
     except requests.RequestException as e:
         raise GitRepositoryScanFault(
             "Failed to set properties of Git repository: %s" % unicode(e))
コード例 #2
0
ファイル: githosting.py プロジェクト: pombredanne/launchpad-3
 def getProperties(self, path):
     """See `IGitHostingClient`."""
     try:
         return self._get("/repo/%s" % path)
     except requests.RequestException as e:
         raise GitRepositoryScanFault(
             "Failed to get properties of Git repository: %s" % unicode(e))
コード例 #3
0
ファイル: githosting.py プロジェクト: pombredanne/launchpad-3
 def getRefs(self, path, exclude_prefixes=None):
     """See `IGitHostingClient`."""
     try:
         return self._get("/repo/%s/refs" % path,
                          params={"exclude_prefix": exclude_prefixes})
     except requests.RequestException as e:
         raise GitRepositoryScanFault(
             "Failed to get refs from Git repository: %s" % unicode(e))
コード例 #4
0
ファイル: githosting.py プロジェクト: pombredanne/launchpad-3
 def getCommits(self, path, commit_oids, logger=None):
     """See `IGitHostingClient`."""
     commit_oids = list(commit_oids)
     try:
         if logger is not None:
             logger.info("Requesting commit details for %s" % commit_oids)
         return self._post("/repo/%s/commits" % path,
                           json={"commits": commit_oids})
     except requests.RequestException as e:
         raise GitRepositoryScanFault(
             "Failed to get commit details from Git repository: %s" %
             unicode(e))
コード例 #5
0
ファイル: githosting.py プロジェクト: pombredanne/launchpad-3
 def detectMerges(self, path, target, sources, logger=None):
     """See `IGitHostingClient`."""
     sources = list(sources)
     try:
         if logger is not None:
             logger.info("Detecting merges for %s from %s to %s" %
                         (path, sources, target))
         return self._post("/repo/%s/detect-merges/%s" %
                           (path, quote(target)),
                           json={"sources": sources})
     except requests.RequestException as e:
         raise GitRepositoryScanFault(
             "Failed to detect merges in Git repository: %s" % unicode(e))
コード例 #6
0
ファイル: githosting.py プロジェクト: pombredanne/launchpad-3
 def getMergeDiff(self, path, base, head, prerequisite=None, logger=None):
     """See `IGitHostingClient`."""
     try:
         if logger is not None:
             logger.info("Requesting merge diff for %s from %s to %s" %
                         (path, base, head))
         url = "/repo/%s/compare-merge/%s:%s" % (path, quote(base),
                                                 quote(head))
         return self._get(url, params={"sha1_prerequisite": prerequisite})
     except requests.RequestException as e:
         raise GitRepositoryScanFault(
             "Failed to get merge diff from Git repository: %s" %
             unicode(e))
コード例 #7
0
ファイル: githosting.py プロジェクト: pombredanne/launchpad-3
 def getBlob(self, path, filename, rev=None, logger=None):
     """See `IGitHostingClient`."""
     try:
         if logger is not None:
             logger.info("Fetching file %s from repository %s" %
                         (filename, path))
         url = "/repo/%s/blob/%s" % (path, quote(filename))
         response = self._get(url, params={"rev": rev})
     except requests.RequestException as e:
         if (e.response is not None
                 and e.response.status_code == requests.codes.NOT_FOUND):
             raise GitRepositoryBlobNotFound(path, filename, rev=rev)
         else:
             raise GitRepositoryScanFault(
                 "Failed to get file from Git repository: %s" % unicode(e))
     try:
         blob = base64.b64decode(response["data"].encode("UTF-8"))
         if len(blob) != response["size"]:
             raise GitRepositoryScanFault("Unexpected size (%s vs %s)" %
                                          (len(blob), response["size"]))
         return blob
     except Exception as e:
         raise GitRepositoryScanFault(
             "Failed to get file from Git repository: %s" % unicode(e))
コード例 #8
0
ファイル: githosting.py プロジェクト: pombredanne/launchpad-3
 def getLog(self, path, start, limit=None, stop=None, logger=None):
     """See `IGitHostingClient`."""
     try:
         if logger is not None:
             logger.info("Requesting commit log for %s: "
                         "start %s, limit %s, stop %s" %
                         (path, start, limit, stop))
         return self._get("/repo/%s/log/%s" % (path, quote(start)),
                          params={
                              "limit": limit,
                              "stop": stop
                          })
     except requests.RequestException as e:
         raise GitRepositoryScanFault(
             "Failed to get commit log from Git repository: %s" %
             unicode(e))
コード例 #9
0
ファイル: gitref.py プロジェクト: pombredanne/launchpad-3
def _fetch_blob_from_launchpad(repository_url, ref_path, filename):
    repo_path = urlsplit(repository_url).path.strip("/")
    try:
        response = urlfetch(
            "https://git.launchpad.net/%s/plain/%s" % (
                repo_path, quote(filename)),
            params={"h": ref_path})
    except requests.RequestException as e:
        if (e.response is not None and
                e.response.status_code == requests.codes.NOT_FOUND):
            raise GitRepositoryBlobNotFound(
                repository_url, filename, rev=ref_path)
        else:
            raise GitRepositoryScanFault(
                "Failed to get file from Git repository at %s: %s" %
                (repository_url, str(e)))
    return response.content
コード例 #10
0
ファイル: githosting.py プロジェクト: pombredanne/launchpad-3
 def getDiff(self,
             path,
             old,
             new,
             common_ancestor=False,
             context_lines=None,
             logger=None):
     """See `IGitHostingClient`."""
     try:
         if logger is not None:
             logger.info("Requesting diff for %s from %s to %s" %
                         (path, old, new))
         separator = "..." if common_ancestor else ".."
         url = "/repo/%s/compare/%s%s%s" % (path, quote(old), separator,
                                            quote(new))
         return self._get(url, params={"context_lines": context_lines})
     except requests.RequestException as e:
         raise GitRepositoryScanFault(
             "Failed to get diff from Git repository: %s" % unicode(e))
コード例 #11
0
ファイル: gitref.py プロジェクト: pombredanne/launchpad-3
def _fetch_blob_from_github(repository_url, ref_path, filename):
    repo_path = urlsplit(repository_url).path.strip("/")
    if repo_path.endswith(".git"):
        repo_path = repo_path[:-len(".git")]
    try:
        response = urlfetch(
            "https://raw.githubusercontent.com/%s/%s/%s" % (
                repo_path,
                # GitHub supports either branch or tag names here, but both
                # must be shortened.  (If both a branch and a tag exist with
                # the same name, it appears to pick the branch.)
                quote(re.sub(r"^refs/(?:heads|tags)/", "", ref_path)),
                quote(filename)),
            use_proxy=True)
    except requests.RequestException as e:
        if (e.response is not None and
                e.response.status_code == requests.codes.NOT_FOUND):
            raise GitRepositoryBlobNotFound(
                repository_url, filename, rev=ref_path)
        else:
            raise GitRepositoryScanFault(
                "Failed to get file from Git repository at %s: %s" %
                (repository_url, str(e)))
    return response.content