Exemple #1
0
def get_package_root_path(directory_or_url):
    if is_non_svn_git(directory_or_url):
        # we do not have a svn url, so we need to walk up
        # the local path.. package root is where .git is
        if "://" in directory_or_url:
            raise UrlsNotSupported
        dir = directory_or_url
        while not os.path.exists(os.path.join(dir, ".git")):
            # remove last part from dir path
            dir = "/".join(dir.split("/")[:-1])
            if dir == "":
                raise PackageRootNotFound
        return dir
    else:
        # we have svn url
        url_here = get_svn_url(directory_or_url)
        svn.check_project_layout(url_here)
        url_root = get_package_root_url(directory_or_url)
        url_rel = url_here[len(url_root) + 1 :].split("/")
        if url_rel[0] in ("trunk"):
            url_rel.pop(0)
        elif url_rel[0] in ("branches", "tags"):
            url_rel.pop(0)
            url_rel.pop(0)
        else:
            raise Exception("Confused: check your svn project layout")
        return os.path.abspath("../" * len(url_rel))
Exemple #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