def fetch_depot_tools(fips_dir): out_dir = get_out_dir(fips_dir) make_dirs(out_dir) dt_dir = get_depot_tools_dir(fips_dir) if not os.path.isdir(dt_dir): log.info('>> cloning depot_tools to {}'.format(dt_dir)) git.clone(DEPOT_TOOLS_URL, None, 1, 'depot_tools', out_dir) else: log.info('>> depot_tools already cloned to {}'.format(dt_dir))
def fetch_dawn(fips_dir): sdk_dir = get_sdk_dir(fips_dir) make_dirs(sdk_dir) dawn_dir = get_dawn_dir(fips_dir) if not os.path.isdir(dawn_dir): log.info('>> cloning Dawn sources to {}'.format(dawn_dir)) git.clone(DAWN_URL, None, 1, 'dawn', sdk_dir) else: log.info('>> Dawn sources already cloned to {}'.format(dawn_dir))
def clone_or_update_emsdk(fips_dir): # returns True on success emsdk_dir = get_emsdk_dir(fips_dir) if emsdk_dir_exists(fips_dir): log.colored(log.YELLOW, "=== updating emscripten SDK at '{}'".format(emsdk_dir)) return git.update_force_and_ignore_local_changes(emsdk_dir) else: log.colored(log.YELLOW, "=== cloning emscripten SDK to '{}'".format(emsdk_dir)) make_dirs(fips_dir) sdkroot_dir = get_sdkroot_dir(fips_dir) return git.clone(EMSDK_URL, None, 1, "emsdk", sdkroot_dir)
def _rec_fetch_imports(fips_dir, proj_dir, handled) : """internal recursive function to fetch project imports, keeps an array of already handled dirs to break cyclic dependencies :param proj_dir: current project directory :param handled: array of already handled dirs :returns: updated array of handled dirs """ ws_dir = util.get_workspace_dir(fips_dir) proj_name = util.get_project_name_from_dir(proj_dir) if proj_name not in handled : handled.append(proj_name) imports = get_imports(fips_dir, proj_dir) for dep in imports: dep_proj_name = dep if dep not in handled: dep_proj_dir = util.get_project_dir(fips_dir, dep_proj_name) log.colored(log.YELLOW, "=== dependency: '{}':".format(dep_proj_name)) dep_ok = False if not os.path.isdir(dep_proj_dir) : # directory did not exist, do a fresh git clone dep = imports[dep_proj_name] git_commit = None if 'rev' not in dep else dep['rev'] if git_commit : if 'depth' in dep : # when using rev, we may not want depth because the revision may not be reachable log.colored(log.YELLOW, "=== 'depth' was ignored because parameter 'rev' is specified.") dep['depth'] = None git_depth = git.clone_depth if not git_commit and 'depth' not in dep else dep['depth'] git_url = dep['git'] git_branch = dep['branch'] if git.clone(git_url, git_branch, git_depth, dep_proj_name, ws_dir) : if git_commit : log.colored(log.YELLOW, "=== revision: '{}':".format(git_commit)) dep_ok = git.checkout(dep_proj_dir, git_commit) else : dep_ok = True else : log.error('failed to git clone {} into {}'.format(git_url, dep_proj_dir)) else : # directory already exists log.info("dir '{}' exists".format(dep_proj_dir)) dep_ok = True # recuse if dep_ok : handled = _rec_fetch_imports(fips_dir, dep_proj_dir, handled) # done, return the new handled array return handled
def _rec_fetch_imports(fips_dir, proj_dir, handled): """internal recursive function to fetch project imports, keeps an array of already handled dirs to break cyclic dependencies :param proj_dir: current project directory :param handled: array of already handled dirs :returns: updated array of handled dirs """ ws_dir = util.get_workspace_dir(fips_dir) proj_name = util.get_project_name_from_dir(proj_dir) if proj_name not in handled: handled.append(proj_name) imports = get_imports(fips_dir, proj_dir) for dep in imports: dep_proj_name = dep if dep not in handled: dep_proj_dir = util.get_project_dir(fips_dir, dep_proj_name) log.colored(log.YELLOW, "=== dependency: '{}':".format(dep_proj_name)) dep_ok = False if not os.path.isdir(dep_proj_dir): # directory did not exist, do a fresh git clone git_url = imports[dep_proj_name]['git'] git_branch = imports[dep_proj_name]['branch'] if git.clone(git_url, git_branch, dep_proj_name, ws_dir): dep_ok = True else: log.error('failed to git clone {} into {}'.format( git_url, dep_proj_dir)) else: # directory already exists log.info("dir '{}' exists".format(dep_proj_dir)) dep_ok = True # recuse if dep_ok: handled = _rec_fetch_imports(fips_dir, dep_proj_dir, handled) # done, return the new handled array return handled
def _rec_fetch_imports(fips_dir, proj_dir, handled) : """internal recursive function to fetch project imports, keeps an array of already handled dirs to break cyclic dependencies :param proj_dir: current project directory :param handled: array of already handled dirs :returns: updated array of handled dirs """ ws_dir = util.get_workspace_dir(fips_dir) proj_name = util.get_project_name_from_dir(proj_dir) if proj_name not in handled : handled.append(proj_name) imports = get_imports(fips_dir, proj_dir) for dep in imports: dep_proj_name = dep if dep not in handled: dep_proj_dir = util.get_project_dir(fips_dir, dep_proj_name) log.colored(log.YELLOW, "=== dependency: '{}':".format(dep_proj_name)) dep_ok = False if not os.path.isdir(dep_proj_dir) : # directory did not exist, do a fresh git clone git_url = imports[dep_proj_name]['git'] git_branch = imports[dep_proj_name]['branch'] if git.clone(git_url, git_branch, dep_proj_name, ws_dir) : dep_ok = True else : log.error('failed to git clone {} into {}'.format(git_url, dep_proj_dir)) else : # directory already exists log.info("dir '{}' exists".format(dep_proj_dir)) dep_ok = True # recuse if dep_ok : handled = _rec_fetch_imports(fips_dir, dep_proj_dir, handled) # done, return the new handled array return handled
def clone(fips_dir, url) : """clone an existing fips project with git, do NOT fetch dependencies :param fips_dir: absolute path to fips :param url: git url to clone from (may contain branch name separated by '#') :return: True if project was successfully cloned """ ws_dir = util.get_workspace_dir(fips_dir) proj_name = util.get_project_name_from_url(url) proj_dir = util.get_project_dir(fips_dir, proj_name) if not os.path.isdir(proj_dir) : git_url = util.get_giturl_from_url(url) git_branch = util.get_gitbranch_from_url(url) if git.clone(git_url, git_branch, proj_name, ws_dir) : # fetch imports dep.fetch_imports(fips_dir, proj_dir) return True else : log.error("failed to 'git clone {}' into '{}'".format(url, proj_dir)) return False else : log.error("project dir '{}' already exists".format(proj_dir)) return False
def clone(fips_dir, url) : """clone an existing fips project with git, do NOT fetch dependencies :param fips_dir: absolute path to fips :param url: git url to clone from (may contain branch name separated by '#') :return: True if project was successfully cloned """ ws_dir = util.get_workspace_dir(fips_dir) proj_name = util.get_project_name_from_url(url) proj_dir = util.get_project_dir(fips_dir, proj_name) if not os.path.isdir(proj_dir) : git_url = util.get_giturl_from_url(url) git_branch = util.get_gitbranch_from_url(url) if git.clone(git_url, git_branch, git.clone_depth, proj_name, ws_dir) : # fetch imports dep.fetch_imports(fips_dir, proj_dir) return True else : log.error("failed to 'git clone {}' into '{}'".format(url, proj_dir)) return False else : log.error("project dir '{}' already exists".format(proj_dir)) return False