diff --git a/hdlmake b/hdlmake index dacef8f789f7577725084f709ad2fe70913278be..020b0b49dfd4712392855d2d65aae946c1502282 100755 Binary files a/hdlmake and b/hdlmake differ diff --git a/src/fetch.py b/src/fetch.py index ae787482f8ff079dc3aa6b9bcc618e0aacb1b260..8e1e80cf587a9c3bfd9bcdf0a2142fde5af1cade 100644 --- a/src/fetch.py +++ b/src/fetch.py @@ -55,13 +55,12 @@ class ModulePool(list): cur_dir = os.getcwd() os.chdir(module.fetchto) - url, rev = self.__parse_repo_url(module.url) cmd = "svn checkout {0} " + module.basename if rev: - cmd = cmd.format(url + '@' + rev) + cmd = cmd.format(module.url + '@' + module.revision) else: - cmd = cmd.format(url) + cmd = cmd.format(module.url) rval = True @@ -71,7 +70,6 @@ class ModulePool(list): os.chdir(cur_dir) module.isfetched = True - module.revision = rev module.path = os.path.join(module.fetchto, module.basename) return rval @@ -80,9 +78,10 @@ class ModulePool(list): os.mkdir(module.fetchto) cur_dir = os.getcwd() - url, rev = self.__parse_repo_url(module.url) + if module.branch == None: + module.branch = "master" - basename = path.url_basename(url) + basename = path.url_basename(module.url) mod_path = os.path.join(module.fetchto, basename) if basename.endswith(".git"): @@ -94,11 +93,11 @@ class ModulePool(list): update_only = False if update_only: - cmd = "(cd {0} && git pull)" - cmd = cmd.format(mod_path) + cmd = "(cd {0} && git checkout {1})" + cmd = cmd.format(mod_path, module.branch) else: - cmd = "(cd {0} && git clone {1})" - cmd = cmd.format(module.fetchto, url) + cmd = "(cd {0} && git clone -b {2} {1})" + cmd = cmd.format(module.fetchto, module.url, module.branch) rval = True @@ -106,35 +105,18 @@ class ModulePool(list): if os.system(cmd) != 0: rval = False - if rev and rval: + if module.revision and rval: os.chdir(mod_path) - cmd = "git checkout " + rev + cmd = "git checkout " + module.revision p.vprint(cmd) if os.system(cmd) != 0: rval = False os.chdir(cur_dir) module.isfetched = True - module.revision = rev module.path = mod_path return rval - def __parse_repo_url(self, url) : - """ - Check if link to a repo seems to be correct. Filter revision number - """ - import re - url_pat = re.compile("[ \t]*([^ \t]+)[ \t]*(@[ \t]*(.+))?[ \t]*") - url_match = re.match(url_pat, url) - - if url_match == None: - p.echo("Not a correct repo url: {0}. Skipping".format(url)) - if url_match.group(3) != None: #there is a revision given - ret = (url_match.group(1), url_match.group(3)) - else: - ret = (url_match.group(1), None) - return ret - #end class ModuleFetcher def __init__(self): self.top_module = None diff --git a/src/module.py b/src/module.py index 87b3aae21a540d726cc53e4f8d4ad2d5a355e852..21f3af3675e3b6ee7134853415524e952ff7dc6e 100644 --- a/src/module.py +++ b/src/module.py @@ -47,6 +47,7 @@ class Module(object): return path.url_basename(self.url) def __init__(self, parent, url, source, fetchto, pool): + import path self.fetchto = fetchto self.pool = pool self.source = source @@ -65,7 +66,10 @@ class Module(object): self.revision = None self._files = None self.manifest = None - self.url = url + if source != "local": + self.url, self.branch, self.revision = path.url_parse(url) + else: + self.url, self.branch, self.revision = url, None, None if source == "local" and not os.path.exists(url): p.rawprint("Path to the local module doesn't exist:\n" + url) diff --git a/src/path.py b/src/path.py index 0cfcc4c9a9cb6a038d0521ee347d131797630605..11879a11bea2ec2914d6912b243b1e4003574b9a 100644 --- a/src/path.py +++ b/src/path.py @@ -20,6 +20,7 @@ # import os +import msg as p ise_path_64 = { "10.0":"/opt/Xilinx/10.0/ISE/bin/lin", @@ -37,11 +38,37 @@ ise_path_32 = {"10.0":"/opt/Xilinx/10.0/ISE/bin/lin", "12.4":"/opt/Xilinx/12.4/ISE_DS/ISE/bin/lin64", "13.1":"/opt/Xilinx/13.1/ISE_DS/ISE/bin/lin64"} +def url_parse(url): + """ + Check if link to a repo seems to be correct. Filter revision number and branch + """ + import re + print "<<<" + url + """url_pat = re.compile("[ \t]*([^ \t]+?)[ \t]*(::)?([^ \t@]+)?(@[ \t]*(.+))?[ \t]*") + url_match = re.match(url_pat, url) + if url_match == None: + p.echo("Not a correct repo url: {0}. Skipping".format(url)) + url_clean = url_match.group(1) + if url_match.group(3) != None: #there is a branch + branch = url_match.group(3) + if url_match.group(5) != None: #there is a revision given + rev = url_match.group(5)""" + url_clean, branch, rev = None, None, None + if "@@" in url: + url_clean, rev = url.split("@@") + elif "::" in url: + url_clean, branch = url.split("::") + else: + url_clean = url + + print url_clean, branch, rev + return (url_clean, branch, rev) def url_basename(url): """ Get basename from an url """ + if url.endswith(".git"): ret = os.path.basename(url[:-4]) elif url[-1] == '/':