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()
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 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
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
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
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 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
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 ""
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 ""