예제 #1
0
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
예제 #2
0
 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