Beispiel #1
0
    def _ExecuteOne(self, revision, nb, project):
        """Start one project."""
        # If the current revision is immutable, such as a SHA1, a tag or
        # a change, then we can't push back to it. Substitute with
        # dest_branch, if defined; or with manifest default revision instead.
        branch_merge = ''
        if IsImmutable(project.revisionExpr):
            if project.dest_branch:
                branch_merge = project.dest_branch
            else:
                branch_merge = self.manifest.default.revisionExpr

        try:
            ret = project.StartBranch(nb,
                                      branch_merge=branch_merge,
                                      revision=revision)
        except Exception as e:
            print('error: unable to checkout %s: %s' % (project.name, e),
                  file=sys.stderr)
            ret = False
        return (ret, project)
Beispiel #2
0
    def Execute(self, opt, args):
        nb = args[0]
        err = []
        projects = []
        if not opt.all:
            projects = args[1:]
            if len(projects) < 1:
                projects = [
                    '.',
                ]  # start it in the local project by default

        all_projects = self.GetProjects(projects,
                                        missing_ok=bool(self.gitc_manifest))

        # This must happen after we find all_projects, since GetProjects may need
        # the local directory, which will disappear once we save the GITC manifest.
        if self.gitc_manifest:
            gitc_projects = self.GetProjects(projects,
                                             manifest=self.gitc_manifest,
                                             missing_ok=True)
            for project in gitc_projects:
                if project.old_revision:
                    project.already_synced = True
                else:
                    project.already_synced = False
                    project.old_revision = project.revisionExpr
                project.revisionExpr = None
            # Save the GITC manifest.
            gitc_utils.save_manifest(self.gitc_manifest)

            # Make sure we have a valid CWD
            if not os.path.exists(os.getcwd()):
                os.chdir(self.manifest.topdir)

        pm = Progress('Starting %s' % nb, len(all_projects))
        for project in all_projects:
            pm.update()

            if self.gitc_manifest:
                gitc_project = self.gitc_manifest.paths[project.relpath]
                # Sync projects that have not been opened.
                if not gitc_project.already_synced:
                    proj_localdir = os.path.join(
                        self.gitc_manifest.gitc_client_dir, project.relpath)
                    project.worktree = proj_localdir
                    if not os.path.exists(proj_localdir):
                        os.makedirs(proj_localdir)
                    project.Sync_NetworkHalf()
                    sync_buf = SyncBuffer(self.manifest.manifestProject.config)
                    project.Sync_LocalHalf(sync_buf)
                    project.revisionId = gitc_project.old_revision

            # If the current revision is immutable, such as a SHA1, a tag or
            # a change, then we can't push back to it. Substitute with
            # dest_branch, if defined; or with manifest default revision instead.
            branch_merge = ''
            if IsImmutable(project.revisionExpr):
                if project.dest_branch:
                    branch_merge = project.dest_branch
                else:
                    branch_merge = self.manifest.default.revisionExpr

            if not project.StartBranch(nb, branch_merge=branch_merge):
                err.append(project)
        pm.end()

        if err:
            for p in err:
                print("error: %s/: cannot start %s" % (p.relpath, nb),
                      file=sys.stderr)
            sys.exit(1)