def _update_test_env(self, test): """ Update Test Env """ build_env = os.environ.copy() if self.suite_runner.env: build_env = self.suite_runner.env.copy() test_env = test.get("environment") if test_env: build_env.update(test_env) envsetter = qisys.envsetter.EnvSetter(build_env=build_env) if ui.config_color(sys.stdout): envsetter.set_env_var("GTEST_COLOR", "yes") sdk_dir = self.project.sdk_directory if os.name == 'nt': bin_dir = os.path.join(sdk_dir, "bin") envsetter.prepend_to_path(bin_dir) if sys.platform == "darwin": lib_dir = os.path.join(sdk_dir, "lib") envsetter.prepend_directory_to_variable(lib_dir, "DYLD_LIBRARY_PATH") envsetter.prepend_directory_to_variable(sdk_dir, "DYLD_FRAMEWORK_PATH") env = envsetter.get_build_env() test["env"] = env # Quick hack: gtest_repeat = env.get("GTEST_REPEAT", "1") test["timeout"] = test["timeout"] * int(gtest_repeat)
def diff_worktree(git_worktree, git_projects, branch, cmd=None): """ Run `git <cmd> local_branch..remote_branch` for every project """ if not cmd: cmd = ["log"] remote_projects = git_worktree.get_projects_on_branch(branch) for git_project in git_projects: remote_project = remote_projects.get(git_project.src) if not remote_project: continue git = qisrc.git.Git(git_project.path) local_branch = git.get_current_branch() remote_branch = remote_project.default_branch.name remote_ref = "%s/%s" % (remote_project.default_remote.name, remote_branch) rc, out = git.call("merge-base", local_branch, remote_ref, raises=False) if rc != 0: continue merge_base = out.strip() full_cmd = cmd + ["%s..%s" % (merge_base, local_branch)] color = ui.config_color(sys.stdout) if color: full_cmd.append("--color=always") rc, out = git.call(*full_cmd, raises=False) if rc != 0: continue if not out: continue ui.info(ui.bold, git_project.src) ui.info(ui.bold, "-" * len(git_project.src)) ui.info(out) ui.info()
def do(args): """Main entry point.""" git_worktree = qisrc.parsers.get_git_worktree(args) git_projects = qisrc.parsers.get_git_projects(git_worktree, args, default_all=True, use_build_deps=args.use_deps) git_grep_opts = args.git_grep_opts if args.path == 'none': git_grep_opts.append("-h") else: git_grep_opts.append("-H") if args.path == 'absolute' or args.path == 'worktree': git_grep_opts.append("-I") git_grep_opts.append("--null") if ui.config_color(sys.stdout): git_grep_opts.append("--color=always") git_grep_opts.append(args.pattern) if not git_projects: qisrc.worktree.on_no_matching_projects(git_worktree, groups=args.groups) sys.exit(0) max_src = max(len(x.src) for x in git_projects) retcode = 1 for i, project in enumerate(git_projects): ui.info_count(i, len(git_projects), ui.green, "Looking in", ui.blue, project.src.ljust(max_src), end="\r") git = qisrc.git.Git(project.path) (status, out) = git.call("grep", *git_grep_opts, raises=False) if out != "": if args.path == 'absolute' or args.path == 'worktree': lines = out.splitlines() out_lines = list() for line in lines: line_split = line.split('\0') prepend = project.src if args.path == 'worktree' else project.path line_split[0] = os.path.join(prepend, line_split[0]) out_lines.append(":".join(line_split)) out = '\n'.join(out_lines) ui.info("\n", ui.reset, out) if status == 0: retcode = 0 if not out: ui.info(ui.reset) sys.exit(retcode)
def diff_worktree(git_worktree, git_projects, branch, cmd=None): # pylint: disable=too-many-locals """ Run `git <cmd> local_branch..remote_branch` for every project """ if not cmd: cmd = ["log"] remote_projects = git_worktree.get_projects_on_branch(branch) for git_project in git_projects: remote_project = remote_projects.get(git_project.src) if not remote_project: continue git = qisrc.git.Git(git_project.path) local_branch = git.get_current_branch() if not local_branch: message = (ui.brown, "Not on a branch") else: remote_branch = remote_project.default_branch.name remote_ref = "%s/%s" % (remote_project.default_remote.name, remote_branch) rc, out = git.call("merge-base", local_branch, remote_ref, raises=False) if rc != 0: message = (ui.red, "Calling git merge-base failed") else: merge_base = out.strip() full_cmd = cmd + ["%s..%s" % (merge_base, local_branch)] color = ui.config_color(sys.stdout) if color: full_cmd.append("--color=always") rc, out = git.call(*full_cmd, raises=False) if rc != 0: message = (ui.red, "Calling git log failed") else: if out: message = (out, ) else: continue ui.info(ui.bold, git_project.src) ui.info(ui.bold, "-" * len(git_project.src)) ui.info(*message) ui.info()
def do(args): branch = args.branch short = args.short if short: log_cmd = ["shortlog"] else: # We need to build different format strings depending # on the --color option colors = ["green", "reset", "yellow", "reset", "bold blue", "reset"] log_format = "%m {}%h{} - {}%d{} %s {}<%an>{}" if ui.config_color(sys.stdout): log_format = log_format.format(*("%C({})".format(x) for x in colors)) else: log_format = log_format.format(*([""] * len(colors))) log_cmd = ["log", "--pretty=format:%s" % log_format] git_worktree = qisrc.parsers.get_git_worktree(args) git_projects = qisrc.parsers.get_git_projects(git_worktree, args, default_all=False, use_build_deps=True) qisrc.diff.diff_worktree(git_worktree, git_projects, branch, log_cmd)
def diff_worktree(git_worktree, git_projects, branch, cmd=None): """ Run `git <cmd> local_branch..remote_branch` for every project """ if not cmd: cmd = ["log"] remote_projects = git_worktree.get_projects_on_branch(branch) for git_project in git_projects: remote_project = remote_projects.get(git_project.src) if not remote_project: continue git = qisrc.git.Git(git_project.path) local_branch = git.get_current_branch() if not local_branch: message = (ui.brown, "Not on a branch") else: remote_branch = remote_project.default_branch.name remote_ref = "%s/%s" % (remote_project.default_remote.name, remote_branch) if cmd[0] == "diff": full_cmd = cmd + [remote_ref, local_branch] else: full_cmd = cmd + ["%s...%s" % (remote_ref, local_branch)] color = ui.config_color(sys.stdout) if color: full_cmd.append("--color=always") rc, out = git.call(*full_cmd, raises=False) if rc != 0: message = (ui.red, "git", " ".join(full_cmd), "\n", out) else: if out: message = (out, ) else: continue ui.info(ui.bold, git_project.src) ui.info(ui.bold, "-" * len(git_project.src)) ui.info(*message) ui.info()
def _update_test_env(self, test): build_env = os.environ.copy() if self.suite_runner.env: build_env = self.suite_runner.env.copy() test_env = test.get("environment") if test_env: build_env.update(test_env) envsetter = qisys.envsetter.EnvSetter(build_env=build_env) if ui.config_color(sys.stdout): envsetter.set_env_var("GTEST_COLOR", "yes") sdk_dir = self.project.sdk_directory if os.name == 'nt': bin_dir = os.path.join(sdk_dir, "bin") envsetter.prepend_to_path(bin_dir) if sys.platform == "darwin": lib_dir = os.path.join(sdk_dir, "lib") envsetter.prepend_directory_to_variable(lib_dir, "DYLD_LIBRARY_PATH") envsetter.prepend_directory_to_variable(sdk_dir, "DYLD_FRAMEWORK_PATH") env = envsetter.get_build_env() test["env"] = env # Quick hack: gtest_repeat = env.get("GTEST_REPEAT", "1") test["timeout"] = test["timeout"] * int(gtest_repeat)