X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=module-tools.py;h=70e2d1022673db5eb8921450db49fab99be4b94b;hb=449af2d7054ff48220e99b0df0ffe699e2b7805b;hp=7f1106f6061b4bb9b05986b2b2ee2d8cdb35fbcd;hpb=eb8cca219b0082ffc60f57c05565746c611e1e57;p=build.git diff --git a/module-tools.py b/module-tools.py index 7f1106f6..70e2d102 100755 --- a/module-tools.py +++ b/module-tools.py @@ -11,7 +11,8 @@ from optparse import OptionParser # Moving to git we decided to rename some of the repositories. Here is # a map of name changes applied in git repositories. RENAMED_SVN_MODULES = { - "PLEWWW": "plewww" + "PLEWWW": "plewww", + "PLCAPI": "plcapi" } def svn_to_git_name(module): @@ -194,7 +195,7 @@ class SvnRepository: def commit(self, logfile): # add all new files to the repository Command("svn status %s | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\\ /g' | xargs svn add" % - self.path, self.options).run_silent() + self.path, self.options).output_of() Command("svn commit -F %s %s" % (logfile, self.path), self.options).run_fatal() def to_branch(self, branch): @@ -290,8 +291,9 @@ class GitRepository: return self.__run_in_repo(c.run_fatal) def update(self, subdir=None, recursive=None): - self.__run_command_in_repo("git fetch --tags") - self.__run_command_in_repo("git pull") + self.__run_command_in_repo("git fetch origin --tags") + self.__run_command_in_repo("git fetch origin") + self.__run_command_in_repo("git merge --ff origin/master") def to_branch(self, branch, remote=True): if remote: @@ -314,7 +316,8 @@ class GitRepository: return self.__run_in_repo(c.output_of, with_stderr=True) def commit(self, logfile): - self.__run_command_in_repo("git add -A", ignore_errors=True) + self.__run_command_in_repo("git add .", ignore_errors=True) + self.__run_command_in_repo("git add -u", ignore_errors=True) self.__run_command_in_repo("git commit -F %s" % logfile, ignore_errors=True) self.__run_command_in_repo("git push") self.__run_command_in_repo("git push --tags") @@ -351,9 +354,12 @@ class Repository: break @classmethod - def has_moved_to_git(cls, module, svnpath): + def has_moved_to_git(cls, module, config): module = git_to_svn_name(module) - return SvnRepository.remote_exists("%s/%s/aaaa-has-moved-to-git" % (svnpath, module)) + # check if the module is already in Git +# return SvnRepository.remote_exists("%s/%s/aaaa-has-moved-to-git" % (config['svnpath'], module)) + return GitRepository.remote_exists(Module.git_remote_dir(module)) + @classmethod def remote_exists(cls, remote): @@ -386,7 +392,7 @@ class Module: configKeys=[ ('svnpath',"Enter your toplevel svnpath", "svn+ssh://%s@svn.planet-lab.org/svn/"%commands.getoutput("id -un")), ('gitserver', "Enter your git server's hostname", "git.onelab.eu"), - ('gituser', "Enter your user name (login name) on git server", os.getlogin()), + ('gituser', "Enter your user name (login name) on git server", commands.getoutput("id -un")), ("build", "Enter the name of your build module","build"), ('username',"Enter your firstname and lastname for changelogs",""), ("email","Enter your email address for changelogs",""), @@ -566,7 +572,7 @@ that for other purposes than tagging""" % options.workdir print 'Checking for',self.module_dir if not os.path.isdir (self.module_dir): - if Repository.has_moved_to_git(self.name, Module.config['svnpath']): + if Repository.has_moved_to_git(self.name, Module.config): self.repository = GitRepository.checkout(self.git_remote_dir(self.name), self.module_dir, self.options) @@ -579,7 +585,7 @@ that for other purposes than tagging""" % options.workdir self.repository = Repository(self.module_dir, self.options) if self.repository.type == "svn": # check if module has moved to git - if Repository.has_moved_to_git(self.name, Module.config['svnpath']): + if Repository.has_moved_to_git(self.name, Module.config): Command("rm -rf %s" % self.module_dir, self.options).run_silent() self.init_module_dir() # check if we have the required branch/tag @@ -775,7 +781,7 @@ that for other purposes than tagging""" % options.workdir ############################## # using fine_grain means replacing only those instances that currently refer to this tag - # otherwise, -SVNPATH is replaced unconditionnally + # otherwise, -{SVNPATH,GITPATH} is replaced unconditionnally def patch_tags_file (self, tagsfile, oldname, newname,fine_grain=True): newtagsfile=tagsfile+".new" tags=open (tagsfile) @@ -797,17 +803,21 @@ that for other purposes than tagging""" % options.workdir # brute-force : change uncommented lines that define -SVNPATH else: if self.options.verbose: - print 'Searching for -SVNPATH lines referring to /%s/\n\tin %s .. '%(self.name,tagsfile), - pattern="\A\s*(?P[^\s]+)-SVNPATH\s*(=|:=)\s*(?P[^\s]+)/%s/[^\s]+"\ + print 'Searching for -SVNPATH or -GITPATH lines referring to /%s/\n\tin %s .. '%(self.name,tagsfile), + pattern="\A\s*(?P[^\s]+)-(SVNPATH|GITPATH)\s*(=|:=)\s*(?P[^\s]+)/%s[^\s]+"\ %(self.name) matcher_module=re.compile(pattern) for line in tags.readlines(): attempt=matcher_module.match(line) if attempt: - svnpath="%s-SVNPATH"%(attempt.group('make_name')) + if line.find("-GITPATH") >= 0: + modulepath = "%s-GITPATH"%(attempt.group('make_name')) + replacement = "%-32s:= %s/%s.git@%s\n"%(modulepath,attempt.group('url_main'),self.name,newname) + else: + modulepath = "%s-SVNPATH"%(attempt.group('make_name')) + replacement = "%-32s:= %s/%s/tags/%s\n"%(modulepath,attempt.group('url_main'),self.name,newname) if self.options.verbose: - print ' '+svnpath, - replacement = "%-32s:= %s/%s/tags/%s\n"%(svnpath,attempt.group('url_main'),self.name,newname) + print ' ' + modulepath, new.write(replacement) matches += 1 else: @@ -951,7 +961,7 @@ Please write a changelog for this new tag in the section above self.run("cat %s"%tagsfile) else: name=self.name - print """y: change %(name)s-SVNPATH only if it currently refers to %(old_tag_name)s + print """y: change %(name)s-{SVNPATH,GITPATH} only if it currently refers to %(old_tag_name)s f: unconditionnally change any line that assigns %(name)s-SVNPATH to using %(new_tag_name)s d: show current diff for this tag file r: revert that tag file