X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=module-tools.py;h=189e383746b5cb88f54d2fcf0bad9e0637561c01;hb=f5cab4881fdf442e53eca4b697753f440e937e00;hp=4a4a8793b3a005b694587e5ff8d751b7e6d78435;hpb=7d9ed6517fc0c390bf5f6640356c3fb5175be33e;p=build.git diff --git a/module-tools.py b/module-tools.py index 4a4a8793..189e3837 100755 --- a/module-tools.py +++ b/module-tools.py @@ -269,7 +269,7 @@ class GitRepository: repo = 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) @@ -298,16 +298,26 @@ 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: command = "git branch --track %s origin/%s" % (branch, branch) c = Command(command, self.options) @@ -315,6 +325,7 @@ class GitRepository: 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): @@ -333,10 +344,10 @@ class GitRepository: 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) - if branch == "master": + if branch == "master" or self.__is_commit_id(branch): self.__run_command_in_repo("git push") else: - self.__run_command_in_repo("git push %s:%s" % (branch, branch)) + self.__run_command_in_repo("git push origin %s:%s" % (branch, branch)) self.__run_command_in_repo("git push --tags") def revert(self, f=""):