Example #1
0
  def UpdateProjectList(self):
    new_project_paths = []
    for project in self.GetProjects(None, missing_ok=True):
      if project.relpath:
        new_project_paths.append(project.relpath)
    file_name = 'project.list'
    file_path = os.path.join(self.manifest.repodir, file_name)
    old_project_paths = []

    if os.path.exists(file_path):
      fd = open(file_path, 'r')
      try:
        old_project_paths = fd.read().split('\n')
      finally:
        fd.close()
      for path in old_project_paths:
        if not path:
          continue
        if path not in new_project_paths:
          # If the path has already been deleted, we don't need to do it
          if os.path.exists(self.manifest.topdir + '/' + path):
            project = Project(
                           manifest = self.manifest,
                           name = path,
                           remote = RemoteSpec('origin'),
                           gitdir = os.path.join(self.manifest.topdir,
                                                 path, '.git'),
                           worktree = os.path.join(self.manifest.topdir, path),
                           relpath = path,
                           revisionExpr = 'HEAD',
                           revisionId = None,
                           groups = None)

            if project.IsDirty():
              print('error: Cannot remove project "%s": uncommitted changes '
                    'are present' % project.relpath, file=sys.stderr)
              print('       commit changes, then run sync again',
                    file=sys.stderr)
              return -1
            else:
              print('Deleting obsolete path %s' % project.worktree,
                    file=sys.stderr)
              shutil.rmtree(project.worktree)
              # Try deleting parent subdirs if they are empty
              project_dir = os.path.dirname(project.worktree)
              while project_dir != self.manifest.topdir:
                try:
                  os.rmdir(project_dir)
                except OSError:
                  break
                project_dir = os.path.dirname(project_dir)

    new_project_paths.sort()
    fd = open(file_path, 'w')
    try:
      fd.write('\n'.join(new_project_paths))
      fd.write('\n')
    finally:
      fd.close()
    return 0
Example #2
0
    def UpdateProjectList(self, opt):
        new_project_paths = []
        for project in self.GetProjects(None, missing_ok=True):
            if project.relpath:
                new_project_paths.append(project.relpath)
        file_name = 'project.list'
        file_path = os.path.join(self.manifest.repodir, file_name)
        old_project_paths = []

        if os.path.exists(file_path):
            fd = open(file_path, 'r')
            try:
                old_project_paths = fd.read().split('\n')
            finally:
                fd.close()
            # In reversed order, so subfolders are deleted before parent folder.
            for path in sorted(old_project_paths, reverse=True):
                if not path:
                    continue
                if path not in new_project_paths:
                    # If the path has already been deleted, we don't need to do it
                    gitdir = os.path.join(self.manifest.topdir, path, '.git')
                    if os.path.exists(gitdir):
                        project = Project(manifest=self.manifest,
                                          name=path,
                                          remote=RemoteSpec('origin'),
                                          gitdir=gitdir,
                                          objdir=gitdir,
                                          worktree=os.path.join(
                                              self.manifest.topdir, path),
                                          relpath=path,
                                          revisionExpr='HEAD',
                                          revisionId=None,
                                          groups=None)

                        if project.IsDirty() and opt.force_remove_dirty:
                            print(
                                'WARNING: Removing dirty project "%s": uncommitted changes '
                                'erased' % project.relpath,
                                file=sys.stderr)
                            self._DeleteProject(project.worktree)
                        elif project.IsDirty():
                            print(
                                'error: Cannot remove project "%s": uncommitted changes '
                                'are present' % project.relpath,
                                file=sys.stderr)
                            print('       commit changes, then run sync again',
                                  file=sys.stderr)
                            return -1
                        elif self._DeleteProject(project.worktree):
                            return -1

        new_project_paths.sort()
        fd = open(file_path, 'w')
        try:
            fd.write('\n'.join(new_project_paths))
            fd.write('\n')
        finally:
            fd.close()
        return 0
Example #3
0
 def ToRemoteSpec(self, projectName):
     url = self.resolvedFetchUrl.rstrip('/') + '/' + projectName
     # Some git servers, the repositories' URLs not end with .git suffix, and
     # if add .git suffix, the URLs not work. A example is freemind repository
     # in git.sourceforge.net.
     if self.autodotgit is None or self.autodotgit:
         url += '.git'
     return RemoteSpec(self.name, url, self.reviewUrl)
Example #4
0
 def ToRemoteSpec(self, projectName):
     url = self.resolvedFetchUrl.rstrip('/') + '/' + projectName
     remoteName = self.name
     if self.remoteAlias:
         remoteName = self.remoteAlias
     return RemoteSpec(remoteName,
                       url=url,
                       review=self.reviewUrl,
                       orig_name=self.name)
Example #5
0
    def UpdateProjectList(self):
        new_project_paths = []
        for project in self.manifest.projects.values():
            if project.relpath:
                new_project_paths.append(project.relpath)
        file_name = 'project.list'
        file_path = os.path.join(self.manifest.repodir, file_name)
        old_project_paths = []

        if os.path.exists(file_path):
            fd = open(file_path, 'r')
            try:
                old_project_paths = fd.read().split('\n')
            finally:
                fd.close()
            for path in old_project_paths:
                if not path:
                    continue
                if path not in new_project_paths:
                    project = Project(
                        manifest=self.manifest,
                        name=path,
                        remote=RemoteSpec('origin'),
                        gitdir=os.path.join(self.manifest.topdir, path,
                                            '.git'),
                        worktree=os.path.join(self.manifest.topdir, path),
                        relpath=path,
                        revisionExpr='HEAD',
                        revisionId=None)
                    if project.IsDirty():
                        print >> sys.stderr, 'error: Cannot remove project "%s": \
uncommitted changes are present' % project.relpath
                        print >> sys.stderr, '       commit changes, then run sync again'
                        return -1
                    else:
                        print >> sys.stderr, 'Deleting obsolete path %s' % project.worktree
                        shutil.rmtree(project.worktree)
                        # Try deleting parent subdirs if they are empty
                        dir = os.path.dirname(project.worktree)
                        while dir != self.manifest.topdir:
                            try:
                                os.rmdir(dir)
                            except OSError:
                                break
                            dir = os.path.dirname(dir)

        new_project_paths.sort()
        fd = open(file_path, 'w')
        try:
            fd.write('\n'.join(new_project_paths))
            fd.write('\n')
        finally:
            fd.close()
        return 0
Example #6
0
 def ToRemoteSpec(self, projectName):
     fetchUrl = self.resolvedFetchUrl.rstrip("/")
     url = fetchUrl + "/" + projectName
     remoteName = self.name
     if self.remoteAlias:
         remoteName = self.remoteAlias
     return RemoteSpec(
         remoteName,
         url=url,
         pushUrl=self.pushUrl,
         review=self.reviewUrl,
         orig_name=self.name,
         fetchUrl=self.fetchUrl,
     )
Example #7
0
    def _ParseProject(self, name):
        gm = self._modules
        gr = self._review

        path = gm.GetString('submodule.%s.path' % name)
        if not path:
            path = name

        revId = self._GetRevisionId(path)
        if not revId:
            raise ManifestParseError(
              'submodule "%s" has no revision at "%s"' \
              % (name, path))

        url = gm.GetString('submodule.%s.url' % name)
        if not url:
            url = name
        url = self._ResolveUrl(url)

        review = gr.GetString('review.%s.url' % name)
        if not review:
            review = gr.GetString('review.url')
        if not review:
            review = self._Remote().review

        remote = RemoteSpec(self._Remote().name, url, review)
        revExpr = gm.GetString('submodule.%s.revision' % name)
        if revExpr == '.':
            revExpr = self.branch

        if self.IsMirror:
            relpath = None
            worktree = None
            gitdir = os.path.join(self.topdir, '%s.git' % name)
        else:
            worktree = os.path.join(self.topdir, path)
            gitdir = os.path.join(self.repodir, 'projects/%s.git' % name)

        return Project(manifest=self,
                       name=name,
                       remote=remote,
                       gitdir=gitdir,
                       worktree=worktree,
                       relpath=path,
                       revisionExpr=revExpr,
                       revisionId=revId)
Example #8
0
    def UpdateProjectList(self, opt):
        new_project_paths = []
        for project in self.GetProjects(None, missing_ok=True):
            if project.relpath:
                new_project_paths.append(project.relpath)
        file_name = "project.list"
        file_path = os.path.join(self.manifest.repodir, file_name)
        old_project_paths = []

        if os.path.exists(file_path):
            with open(file_path, "r") as fd:
                old_project_paths = fd.read().split("\n")
            # In reversed order, so subfolders are deleted before parent folder.
            for path in sorted(old_project_paths, reverse=True):
                if not path:
                    continue
                if path not in new_project_paths:
                    # If the path has already been deleted, we don't need to do it
                    gitdir = os.path.join(self.manifest.topdir, path, ".git")
                    if os.path.exists(gitdir):
                        project = Project(
                            manifest=self.manifest,
                            name=path,
                            remote=RemoteSpec("origin"),
                            gitdir=gitdir,
                            objdir=gitdir,
                            use_git_worktrees=os.path.isfile(gitdir),
                            worktree=os.path.join(self.manifest.topdir, path),
                            relpath=path,
                            revisionExpr="HEAD",
                            revisionId=None,
                            groups=None,
                        )
                        if not project.DeleteWorktree(
                                quiet=opt.quiet, force=opt.force_remove_dirty):
                            return 1

        new_project_paths.sort()
        with open(file_path, "w") as fd:
            fd.write("\n".join(new_project_paths))
            fd.write("\n")
        return 0
Example #9
0
    def _AddMetaProjectMirror(self, m):
        m_url = m.GetRemote(m.remote.name).url
        if m_url.endswith('/.git'):
            raise ManifestParseError, 'refusing to mirror %s' % m_url

        name = self._GuessMetaName(m_url)
        if name.endswith('.git'):
            name = name[:-4]

        if name not in self._projects:
            m.PreSync()
            gitdir = os.path.join(self.topdir, '%s.git' % name)
            project = Project(manifest=self,
                              name=name,
                              remote=RemoteSpec(self._Remote().name, m_url),
                              gitdir=gitdir,
                              worktree=None,
                              relpath=None,
                              revisionExpr=m.revisionExpr,
                              revisionId=None)
            self._projects[project.name] = project
Example #10
0
 def ToRemoteSpec(self, projectName):
   url = self.fetchUrl
   while url.endswith('/'):
     url = url[:-1]
   url += '/%s.git' % projectName
   return RemoteSpec(self.name, url, self.reviewUrl)
Example #11
0
 def ToRemoteSpec(self, projectName):
     url = self.resolvedFetchUrl.rstrip('/') + '/' + projectName
     remoteName = self.name
     return RemoteSpec(remoteName, url, self.reviewUrl)