def get_existing_tags(path): if is_subversion(path): return svn.get_existing_tags(path) elif is_git(path): return git.get_existing_tags(path) else: raise NotAScm
def get_info(self, package, force_reload=False, prompt=True): svn_url = PackageSourceMemory().guess_url(package, prompt=prompt) if not svn_url: return None data = self.get_cached_info(package) update = force_reload rev = self.get_revision_for(package) if not data: update = True elif rev > data["rev"]: update = True if update: svn.check_project_layout(svn_url) data = { "name": package, "tags": svn.get_existing_tags(svn_url), "newest_tag": "", "changes": False, "rev": rev, "url": svn_url, "history": None, } if data["tags"]: # find newest tag tags = [k for k, v in data["tags"].items()] tags.sort(lambda a, b: cmp(data["tags"][a], data["tags"][b])) tags.reverse() newest_tag = tags[0] data["newest_tag"] = newest_tag newest_tag_url = os.path.join(svn_url, "tags", newest_tag) trunk_url = os.path.join(svn_url, "trunk") rows = ( runcmd_with_exitcode( "svn diff %s %s --summarize" % (trunk_url, newest_tag_url), log=False, respond=True )[1] .strip() .split("\n") ) for row in rows: flag, url = re.split("\W*", row.strip(), maxsplit=1) url = url.strip() if ( url.startswith(os.path.join(trunk_url, package.replace(".", "/"))) and not url.endswith("version.txt") and not url.endswith(".mo") ): data["changes"] = True break else: data["changes"] = True self.set_cached_info(package, data) return data