X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=module-tools.py;h=1afe04e2d4abcfd49407cb1d850599cd57cb7020;hb=e845a724b802f9f4f4136bc34203c3ca1d44fcc4;hp=52653eaca27dde12b62c2e23c15e429cf745ad98;hpb=b027643169666b8d84617202f1a68b1880048a6b;p=build.git diff --git a/module-tools.py b/module-tools.py index 52653eac..1afe04e2 100755 --- a/module-tools.py +++ b/module-tools.py @@ -12,7 +12,15 @@ from optparse import OptionParser # a map of name changes applied in git repositories. RENAMED_SVN_MODULES = { "PLEWWW": "plewww", - "PLCAPI": "plcapi" + "PLCAPI": "plcapi", + "BootManager": "bootmanager", + "BootCD": "bootcd", + "VserverReference": "vserver-reference", + "BootstrapFS": "bootstrapfs", + "MyPLC": "myplc", + "CoDemux": "codemux", + "NodeManager": "nodemanager", + "NodeUpdate": "nodeupdate" } def svn_to_git_name(module): @@ -251,17 +259,17 @@ class GitRepository: return os.path.basename(self.path) def url(self): - self.repo_root() + return self.repo_root() def repo_root(self): c = Command("git remote show origin", self.options) out = self.__run_in_repo(c.output_of) for line in out.split('\n'): if line.strip().startswith("Fetch URL:"): - repo = line.split()[2] + return line.split()[2] @classmethod - def checkout(cls, remote, local, options, depth=1): + def checkout(cls, remote, local, options, depth=0): Command("rm -rf %s" % local, options).run_silent() Command("git clone --depth %d %s %s" % (depth, remote, local), options).run_fatal() return GitRepository(local, options) @@ -290,21 +298,34 @@ class GitRepository: else: return self.__run_in_repo(c.run_fatal) + def __is_commit_id(self, id): + c = Command("git show %s | grep commit | awk '{print $2;}'" % id, self.options) + ret = self.__run_in_repo(c.output_of, with_stderr=False) + if ret.strip() == id: + return True + return False + def update(self, subdir=None, recursive=None, branch="master"): if branch == "master": self.__run_command_in_repo("git checkout %s" % branch) else: - self.__run_command_in_repo("git checkout origin/%s" % branch) + self.to_branch(branch, remote=True) 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/%s" % branch) + if not self.__is_commit_id(branch): + # we don't need to merge anythign for commit ids. + self.__run_command_in_repo("git merge --ff origin/%s" % branch) def to_branch(self, branch, remote=True): + self.revert() if remote: - branch = "origin/%s" % branch + command = "git branch --track %s origin/%s" % (branch, branch) + c = Command(command, self.options) + self.__run_in_repo(c.output_of, with_stderr=True) return self.__run_command_in_repo("git checkout %s" % branch) def to_tag(self, tag): + self.revert() return self.__run_command_in_repo("git checkout %s" % tag) def tag(self, tagname, logfile): @@ -319,11 +340,14 @@ class GitRepository: c = Command("git diff %s" % tagname, self.options) return self.__run_in_repo(c.output_of, with_stderr=True) - def commit(self, logfile): + def commit(self, logfile, branch="master"): 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") + if branch == "master" or self.__is_commit_id(branch): + self.__run_command_in_repo("git push") + else: + self.__run_command_in_repo("git push origin %s:%s" % (branch, branch)) self.__run_command_in_repo("git push --tags") def revert(self, f=""): @@ -359,7 +383,7 @@ class Repository: @classmethod def has_moved_to_git(cls, module, config): - module = git_to_svn_name(module) + module = svn_to_git_name(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)) @@ -814,17 +838,17 @@ that for other purposes than tagging""" % options.workdir else: if self.options.verbose: 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) + pattern="\A\s*%s-(SVNPATH|GITPATH)\s*(=|:=)\s*(?P[^\s]+)/%s[^\s]+"\ + %(self.name,self.name) matcher_module=re.compile(pattern) for line in tags.readlines(): attempt=matcher_module.match(line) if attempt: if line.find("-GITPATH") >= 0: - modulepath = "%s-GITPATH"%(attempt.group('make_name')) + modulepath = "%s-GITPATH"%self.name replacement = "%-32s:= %s/%s.git@%s\n"%(modulepath,attempt.group('url_main'),self.name,newname) else: - modulepath = "%s-SVNPATH"%(attempt.group('make_name')) + modulepath = "%s-SVNPATH"%self.name replacement = "%-32s:= %s/%s/tags/%s\n"%(modulepath,attempt.group('url_main'),self.name,newname) if self.options.verbose: print ' ' + modulepath, @@ -964,7 +988,7 @@ Please write a changelog for this new tag in the section above elif choice == 'f': self.patch_tags_file(tagsfile,old_tag_name,new_tag_name,fine_grain=False) elif choice == 'd': - print build.diff(f=tagsfile) + print build.diff(f=os.path.basename(tagsfile)) elif choice == 'r': build.revert(f=tagsfile) elif choice == 'c': @@ -989,7 +1013,10 @@ n: move to next file"""%locals() print self.repository.diff() def commit_all_changes(log): - self.repository.commit(log) + if hasattr(self,'branch'): + self.repository.commit(log, branch=self.branch) + else: + self.repository.commit(log) build.commit(log) self.run_prompt("Review module and build", diff_all_changes) @@ -1018,6 +1045,7 @@ n: move to next file"""%locals() return else: self.html_print ("%-16s %s"%(varname,spec_dict[varname])) + self.html_print ("%-16s %s"%('url',self.repository.url())) if self.options.verbose: self.html_print ("%-16s %s"%('main specfile:',self.main_specname())) self.html_print ("%-16s %s"%('specfiles:',self.all_specnames()))