def __dump_tree_consistency_info (self, log, suite_ctxdata): log.write ("\n-- TREE CONSISTENCY LOG:\n") if not suite_ctxdata: log.write ( "suite context info unavailable, " "tree consistency unchecked\n") return os.chdir (self.repodir) local_treeref = treeref_at(self.repodir) suite_treeref = suite_ctxdata['treeref'] if local_treeref == suite_treeref: log.write ( "artifact tree ref matches testsuite (%s)\n" % local_treeref) return log.write ( "local_treeref = %s , suite_treeref = %s\n" % \ (local_treeref, suite_treeref) ) merge_base = output_of ( "git merge-base %s %s" % (local_treeref, suite_treeref) ).strip(' \n') (first, next) = ( (suite_treeref, local_treeref) if merge_base == suite_treeref else (local_treeref, suite_treeref) if merge_base == local_treeref else (None, None)) if first == None: log.write ( "!!! local and suite tree refs aren't sequential !!!\n") return log.write ( "%s tree is ahead\n" % \ ('suite' if first == local_treeref else 'local') ) gitlog_cmd = ( "git rev-list --oneline %s ^%s" % (next, first)) log.write ( '\n'.join (['', gitlog_cmd, '--', output_of(gitlog_cmd), '']) )
def treeref_at(dirname): """A string representative of where the DIRNAME directory originates from (e.g. svn rev or git commit), to be used for consistency checks when multiple operations are done separately but should work over synchronized directory trees.""" # Assuming git, sha1 for the HEAD reference return output_of("git rev-parse HEAD", dir=dirname).rstrip('\n')
def current_gitbranch_at(dirname): cwd = os.getcwd() os.chdir(dirname) this_branch = re.search(pattern="\* (?P<branchname>\S*)", string=output_of("git branch")).group('branchname') os.chdir(cwd) return this_branch