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
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
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)
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)
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
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, )
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)
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
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
def ToRemoteSpec(self, projectName): url = self.fetchUrl while url.endswith('/'): url = url[:-1] url += '/%s.git' % projectName return RemoteSpec(self.name, url, self.reviewUrl)
def ToRemoteSpec(self, projectName): url = self.resolvedFetchUrl.rstrip('/') + '/' + projectName remoteName = self.name return RemoteSpec(remoteName, url, self.reviewUrl)