Exemplo n.º 1
0
	def importpath2pkgname(self, importpath):
		# TODO: maybe use some sort of cache of importpath -> packagename
		ip = ImportPath(importpath)
		if not ip.parse():
			return ""

		return ip.getPackageName()
Exemplo n.º 2
0
    def retrieve(self):
        # parse import path
        self.ip_obj = ImportPath(self.import_path)
        if not self.ip_obj.parse():
            self.err = self.ip_obj.getError()
            return False

        provider = self.ip_obj.getProvider()
        project = self.ip_obj.getProject()
        repo = self.ip_obj.getRepository()

        # do we know provider?
        if provider not in [GITHUB, BITBUCKET]:
            self.err = "Latest commit can be detected only for github.com and bitbucket.org"
            return False

        # do we have a commit?
        if self.commit == "":
            self.commit = self.getLatestCommit(provider, project, repo)
            if self.commit == "":
                self.err = "Unable to get the latest commit, json corrupted"
                return False

        self.archive_info = self.constructArchiveInfo(provider, project, repo,
                                                      self.commit)
        if self.archive_info == None:
            self.err = "Unable to construct archive info"
            return False

        return True
Exemplo n.º 3
0
    def testPackageName(self):
        name = self.sp_obj.getTag('name')
        url = self.sp_obj.getTag('url')

        if name == "":
            self.t_result = "E: Missing name tag"
            self.err_number += 1
            return False

        if url == "":
            self.t_result = "E: Missing url tag"
            self.err_number += 1
            return False

        ip_obj = ImportPath(url)
        if not ip_obj.parse():
            self.err = ip_obj.getError()
            return False

        pkg_name = ip_obj.getPackageName()
        if pkg_name == '':
            self.t_result = "E: Uknown repo url"
            self.err_number += 1
            return False

        if pkg_name != name:
            self.t_result = "W: Incorrect package name %s, should be %s" % (
                name, pkg_name)
            self.warn_number += 1
            return False

        self.t_result = "I: Package name correct"
        return True
Exemplo n.º 4
0
    def decompose(self):
        ni_obj = NativeImports()
        if not ni_obj.retrieve():
            self.err = ni_obj.getError()
            return False

        native = ni_obj.getImports()

        for gimport in self.imports:
            prefix = gimport.split('/')[0]
            if prefix in native:
                key = "Native"
            else:
                ip_obj = ImportPath(gimport)
                if not ip_obj.parse():
                    self.warn.append(ip_obj.getError())
                    key = "Unknown"
                else:
                    key = ip_obj.getPrefix()

            if key not in self.classes:
                self.classes[key] = [gimport]
            else:
                self.classes[key].append(gimport)

        return True
Exemplo n.º 5
0
	def importpath2pkgname(self, importpath):
		# TODO: maybe use some sort of cache of importpath -> packagename
		ip = ImportPath(importpath)
		if not ip.parse():
			return ""

		return ip.getPackageName()
Exemplo n.º 6
0
	def testPackageName(self):
		name = self.sp_obj.getTag('name')
		url = self.sp_obj.getTag('url')

		if name == "":
			self.t_result = "E: Missing name tag"
			self.err_number += 1
			return False

		if url == "":
			self.t_result = "E: Missing url tag"
			self.err_number += 1
			return False

		ip_obj = ImportPath(url)
		if not ip_obj.parse():
			self.err = ip_obj.getError()
			return False

		pkg_name = ip_obj.getPackageName()
		if pkg_name == '':
			self.t_result = "E: Uknown repo url"
			self.err_number += 1
			return False

		if pkg_name != name:
			self.t_result = "W: Incorrect package name %s, should be %s" % (name, pkg_name)
			self.warn_number += 1
			return False

		self.t_result = "I: Package name correct"
		return True
Exemplo n.º 7
0
	def decompose(self):
		ni_obj = NativeImports()
		if not ni_obj.retrieve():
			self.err = ni_obj.getError()
			return False

		native = ni_obj.getImports()

		for gimport in self.imports:
			prefix = gimport.split('/')[0]
			if prefix in native:
				key = "Native"
			else:
				ip_obj = ImportPath(gimport)
				if not ip_obj.parse():
					self.warn.append(ip_obj.getError())
					key = "Unknown"
				else:
					key = ip_obj.getPrefix()

			if key not in self.classes:
				self.classes[key] = [gimport]
			else:
				self.classes[key].append(gimport)

		return True
Exemplo n.º 8
0
	def retrieve(self):
		# parse import path
		self.ip_obj = ImportPath(self.import_path)
		if not self.ip_obj.parse():
			self.err = self.ip_obj.getError()
			return False

		provider = self.ip_obj.getProvider()
		project = self.ip_obj.getProject()
		repo = self.ip_obj.getRepository()

		# do we know provider?
		if self.commit == "" and provider not in [GITHUB, BITBUCKET]:
			self.err = "Latest commit can be detected only for github.com and bitbucket.org"
			return False

		# do we have a commit?
		if self.commit == "":
			self.commit = self.getLatestCommit(provider, project, repo)
			if self.commit == "":
				self.err = "Unable to get the latest commit, json corrupted"
				return False

		self.archive_info = self.constructArchiveInfo(provider, project, repo, self.commit)
		if self.archive_info == None:
			self.err = "Unable to construct archive info"
			return False

		# construct signature
		self.signature = "%s-%s-%s-%s" % (self.ip_obj.getProviderName(), project, repo, self.commit)

		return True
Exemplo n.º 9
0
    def processElement(self, element):
        # convert each import path prefix to provider prefix
        ip_obj = ImportPath(element)
        if not ip_obj.parse():
            self.err.append(ip_obj.getError())
            return {}

        provider_prefix = ip_obj.getProviderPrefix()
        if provider_prefix not in self.local_repos:
            self.err.append("Repository for %s not found" % provider_prefix)
            return {}

            # print self.local_repos[provider_prefix]
        path = self.local_repos[provider_prefix]
        upstream = self.upstream_repo[provider_prefix]

        # the list is not sorted by date
        commits = getRepoCommits(path, upstream, pull=self.pull)
        commit_dates = {}
        for commit in commits:
            commit_dates[commits[commit]] = commit

        last_commit_date = 1
        last_commit = -1
        for comm_date in sorted(commit_dates.keys()):
            # print (comm_date, self.commit_date)
            if int(comm_date) <= self.commit_date:
                last_commit_date = comm_date
                last_commit = commit_dates[comm_date]
            else:
                break

        str_date = datetime.datetime.fromtimestamp(int(last_commit_date)).strftime("%Y-%m-%d %H:%M:%S")

        info = {}
        info["Date"] = str_date
        info["Rev"] = last_commit
        info["ProviderPrefix"] = provider_prefix

        return info
Exemplo n.º 10
0
class RepositoryInfo:
    """
	Based on given import path and commit (optional)  retrieve information
	about repository:
		provider - github, googlecode, bitbucket
		project
		project's repository
		commit
		archive
	"""
    def __init__(self, import_path, commit=""):
        self.import_path = import_path
        self.commit = commit
        self.err = ""
        self.ip_obj = None
        self.archive_info = None

    def getCommit(self):
        return self.commit

    def getError(self):
        return self.err

    def getImportPathInfo(self):
        return self.ip_obj

    def getArchiveInfo(self):
        return self.archive_info

    def retrieve(self):
        # parse import path
        self.ip_obj = ImportPath(self.import_path)
        if not self.ip_obj.parse():
            self.err = self.ip_obj.getError()
            return False

        provider = self.ip_obj.getProvider()
        project = self.ip_obj.getProject()
        repo = self.ip_obj.getRepository()

        # do we know provider?
        if provider not in [GITHUB, BITBUCKET]:
            self.err = "Latest commit can be detected only for github.com and bitbucket.org"
            return False

        # do we have a commit?
        if self.commit == "":
            self.commit = self.getLatestCommit(provider, project, repo)
            if self.commit == "":
                self.err = "Unable to get the latest commit, json corrupted"
                return False

        self.archive_info = self.constructArchiveInfo(provider, project, repo,
                                                      self.commit)
        if self.archive_info == None:
            self.err = "Unable to construct archive info"
            return False

        return True

    def constructArchiveInfo(self, provider, project, repo, commit):

        if provider == GITHUB:
            shortcommit = commit[:7]
            archive = "%s-%s.tar.gz" % (repo, shortcommit)
            archive_dir = "%s-%s" % (repo, commit)
            archive_url = "https://github.com/%s/%s/archive/%s/%s" % (
                project, repo, commit, archive)
        elif provider == BITBUCKET:
            shortcommit = commit[:12]
            archive = "%s.tar.gz" % (shortcommit)
            archive_dir = "%s-%s-%s" % (project, repo, shortcommit)
            archive_url = "https://bitbucket.org/%s/%s/get/%s" % (
                project, repo, archive)

        else:
            return None

        archive_info = ArchiveInfo()
        archive_info.shortcommit = shortcommit
        archive_info.archive = archive
        archive_info.archive_dir = archive_dir
        archive_info.archive_url = archive_url

        return archive_info

    def getLatestCommit(self, provider, project, repo):
        if provider == GITHUB:
            return self.getGithubLatestCommit(project, repo)
        if provider == BITBUCKET:
            return self.getBitbucketLatestCommit(project, repo)
        return ""

    def getGithubLatestCommit(self, project, repo):
        link = "https://api.github.com/repos/%s/%s/commits" % (project, repo)
        try:
            f = urllib.urlopen(link)
        except urllib.HTTPError, e:
            sys.stderr.write('HTTPError = %s\n' % str(e.code))
            return ""
        except urllib.URLError, e:
            sys.stderr.write('URLError = %s\n' % str(e.reason))
            return ""
Exemplo n.º 11
0
class RepositoryInfo:
	"""
	Based on given import path and commit (optional)  retrieve information
	about repository:
		provider - github, googlecode, bitbucket
		project
		project's repository
		commit
		archive
	"""
	def __init__(self, import_path, commit = ""):
		self.import_path = import_path
		self.commit = commit
		self.err = ""
		self.ip_obj = None
		self.archive_info = None
		self.signature = ""

	def getCommit(self):
		return self.commit

	def getError(self):
		return self.err

	def getImportPathInfo(self):
		return self.ip_obj

	def getArchiveInfo(self):
		return self.archive_info

	def retrieve(self):
		# parse import path
		self.ip_obj = ImportPath(self.import_path)
		if not self.ip_obj.parse():
			self.err = self.ip_obj.getError()
			return False

		provider = self.ip_obj.getProvider()
		project = self.ip_obj.getProject()
		repo = self.ip_obj.getRepository()

		# do we know provider?
		if self.commit == "" and provider not in [GITHUB, BITBUCKET]:
			self.err = "Latest commit can be detected only for github.com and bitbucket.org"
			return False

		# do we have a commit?
		if self.commit == "":
			self.commit = self.getLatestCommit(provider, project, repo)
			if self.commit == "":
				self.err = "Unable to get the latest commit, json corrupted"
				return False

		self.archive_info = self.constructArchiveInfo(provider, project, repo, self.commit)
		if self.archive_info == None:
			self.err = "Unable to construct archive info"
			return False

		# construct signature
		self.signature = "%s-%s-%s-%s" % (self.ip_obj.getProviderName(), project, repo, self.commit)

		return True

	def constructArchiveInfo(self, provider, project, repo, commit):

		if provider == GITHUB:
			shortcommit = commit[:7]
			archive = "%s-%s.tar.gz" % (repo, shortcommit)
			archive_dir = "%s-%s" % (repo, commit)
			archive_url = "https://github.com/%s/%s/archive/%s/%s" % (project, repo, commit, archive)
		elif provider == BITBUCKET:
			shortcommit = commit[:12]
			archive = "%s.tar.gz" % (shortcommit)
			archive_dir = "%s-%s-%s" % (project, repo, shortcommit)
			archive_url = "https://bitbucket.org/%s/%s/get/%s" % (project, repo, archive)
		elif provider == GOOGLECODE:
			shortcommit = commit[:12]
			archive = "%s.tar.gz" % (commit)
			archive_dir = "%s-%s" % (repo, shortcommit)
			# https://go-charset.googlecode.com/archive/ebbeafdc430eb6c7e44e9a730a38eaff4c56ba3a.tar.gz
			archive_url = "https://%s.googlecode.com/archive/%s" % (repo, archive)

		else:
			return None

		archive_info = ArchiveInfo()
		archive_info.shortcommit = shortcommit
		archive_info.archive = archive
		archive_info.archive_dir = archive_dir
		archive_info.archive_url = archive_url

		return archive_info

	def getLatestCommit(self, provider, project, repo):
		if provider == GITHUB:
			return self.getGithubLatestCommit(project, repo)
		if provider == BITBUCKET:
			return self.getBitbucketLatestCommit(project, repo)
		return ""

	def getGithubLatestCommit(self, project, repo):
		link = "https://api.github.com/repos/%s/%s/commits" % (project, repo)
		try:
			f = urllib2.urlopen(link)
		except urllib2.HTTPError, e:
			sys.stderr.write('HTTPError = %s\n' % str(e.code))
			return ""
		except urllib2.URLError, e:
			sys.stderr.write('URLError = %s\n' % str(e.reason))
			return ""