def do(args): """Main entry points.""" git_worktree = qisrc.parsers.get_git_worktree(args) snapshot = None if args.snapshot: snapshot = qisrc.snapshot.Snapshot() snapshot.load(args.snapshot) if snapshot and snapshot.format_version and snapshot.format_version >= 1: reset_manifest(git_worktree, snapshot, ignore_groups=args.ignore_groups) git_projects = qisrc.parsers.get_git_projects(git_worktree, args, default_all=True, use_build_deps=True) errors = list() for i, git_project in enumerate(git_projects): ui.info_count(i, len(git_projects), "Reset", git_project.src) src = git_project.src git = qisrc.git.Git(git_project.path) ok, message = git.require_clean_worktree() if not ok and not args.force: ui.warning(message) errors.append(src) continue if not git_project.default_branch: ui.warning(git_project.src, "not in any manifest, skipping") continue branch = git_project.default_branch.name remote = git_project.default_remote.name git.safe_checkout(branch, remote, force=True) to_reset = None if args.snapshot: to_reset = snapshot.refs.get(src) if not to_reset: ui.warning(src, "not found in the snapshot") continue elif args.tag: to_reset = args.tag else: to_reset = "%s/%s" % (remote, branch) try: qisrc.reset.clever_reset_ref(git_project, to_reset) except: errors.append(src) if not errors: return ui.error("Failed to reset some projects") for error in errors: ui.info(ui.red, " * ", error) sys.exit(1)
def do(args): """Main entry points.""" git_worktree = qisrc.parsers.get_git_worktree(args) snapshot = None if args.snapshot: snapshot = qisrc.snapshot.Snapshot() snapshot.load(args.snapshot) if snapshot and snapshot.format_version and snapshot.format_version >= 1: reset_manifest(git_worktree, snapshot, groups=args.groups) git_projects = qisrc.parsers.get_git_projects(git_worktree, args, default_all=True, use_build_deps=True) errors = list() for i, git_project in enumerate(git_projects): ui.info_count(i, len(git_projects), "Reset", git_project.src) src = git_project.src git = qisrc.git.Git(git_project.path) ok, message = git.require_clean_worktree() if not ok and not args.force: ui.warning(message) errors.append(src) continue git.checkout(".") if not git_project.default_branch: ui.warning(git_project.src, "not in any manifest, skipping") continue branch = git_project.default_branch.name remote = git_project.default_remote.name git.safe_checkout(branch, remote, force=True) to_reset = None if args.snapshot: to_reset = snapshot.refs.get(src) if not to_reset: ui.warning(src, "not found in the snapshot") continue elif args.tag: to_reset = args.tag else: to_reset = "%s/%s" % (remote, branch) try: qisrc.reset.clever_reset_ref(git_project, to_reset) except: errors.append(src) if not errors: return ui.error("Failed to reset some projects") for error in errors: ui.info(ui.red, " * ", error) sys.exit(1)
def test_safe_checkout(cd_to_tmpdir, git_server): git_server.create_repo("foo.git") git = TestGit() git.clone(git_server.srv.join("foo.git").strpath) ok, mess = git.safe_checkout("devel", "origin") assert git.get_current_branch() == "devel" assert ok
def checkout(self, branch, force=False): """ Called by ``qisrc checkout`` For each project, checkout the branch if it is different than the default branch of the manifest. """ ui.info(ui.green, ":: Checkout projects ...") errors = list() manifest_xml = os.path.join(self._syncer.manifest_repo, "manifest.xml") manifest = qisrc.manifest.Manifest(manifest_xml) max_src = max([len(x.src) for x in self.git_projects]) n = len(self.git_projects) for i, project in enumerate(self.git_projects): ui.info_count(i, n, ui.bold, "Checkout", ui.reset, ui.blue, project.src.ljust(max_src), end="\r") if project.default_branch is None: continue branch_name = project.default_branch.name remote_name = project.default_remote.name git = qisrc.git.Git(project.path) ok, err = git.safe_checkout(branch_name, remote_name, force=force) if not ok: errors.append((project.src, err)) if not errors: return ui.error("Failed to checkout some projects") for (project, error) in errors: ui.info(project, ":", error)
def checkout(self, branch, force=False): # pylint: disable=too-many-locals,unused-argument """ Called by ``qisrc checkout`` For each project, checkout the branch if it is different than the default branch of the manifest. """ ui.info(ui.green, ":: Checkout projects ...") errors = list() manifest_xml = os.path.join(self.syncer.manifest_repo, "manifest.xml") manifest = qisrc.manifest.Manifest(manifest_xml) # pylint: disable=unused-variable to_checkout = list() for project in self.git_projects: if project.default_branch is None: continue if project.fixed_ref: continue branch_name = project.default_branch.name git = qisrc.git.Git(project.path) if git.get_current_branch() != branch_name: to_checkout.append(project) n = len(to_checkout) if n == 0: ui.info(ui.green, "Nothing to checkout") return True max_src = max([len(x.src) for x in to_checkout]) for i, project in enumerate(to_checkout): ui.info_count(i, n, ui.bold, "Checkout", ui.reset, ui.blue, project.src.ljust(max_src), end="\r") if project.default_branch is None: continue branch_name = project.default_branch.name remote_name = project.default_remote.name git = qisrc.git.Git(project.path) ok, err = git.safe_checkout(branch_name, remote_name, force=force) if not ok: errors.append((project.src, err)) if not errors: return True ui.error("Failed to checkout some projects") for (project, error) in errors: ui.info(project, ":", error) return False
def checkout(self, branch, force=False): """ Called by ``qisrc checkout`` For each project, checkout the branch if it is different than the default branch of the manifest. """ # FIXME: Why is there a branch parameter if not used ui.info(ui.green, ":: Checkout projects ...") errors = list() to_checkout = list() self.branch = branch for project in self.git_projects: if project.default_branch is None: continue if project.fixed_ref: continue branch_name = project.default_branch.name git = qisrc.git.Git(project.path) if git.get_current_branch() != branch_name: to_checkout.append(project) n = len(to_checkout) if n == 0: ui.info(ui.green, "Nothing to checkout") return True max_src = max([len(x.src) for x in to_checkout]) for i, project in enumerate(to_checkout): ui.info_count(i, n, ui.bold, "Checkout", ui.reset, ui.blue, project.src.ljust(max_src), end="\r") if project.default_branch is None: continue branch_name = project.default_branch.name remote_name = project.default_remote.name git = qisrc.git.Git(project.path) ok, err = git.safe_checkout(branch_name, remote_name, force=force) if not ok: errors.append((project.src, err)) if not errors: return True ui.error("Failed to checkout some projects") for (project, error) in errors: ui.info(project, ":", error) return False