def already_synced(self, strategy): """Check if already synced Check if we are already up to date or if there are changes to be applied. """ # if last commit in the strategy was a merge, then the additional # branches that were merged in previously can be extracted based on # the commits merged. if len(strategy) > 0: prev_import_merge = strategy[-1] else: # no changes carried? prev_import_merge = None additional_commits = None if prev_import_merge and len(prev_import_merge.parents) > 1: additional_commits = { commit for commit in prev_import_merge.parents if commit.hexsha != strategy.previous_upstream.hexsha} if (additional_commits and len(self.extra_branches) != len(additional_commits)): self.log.warning(""" **************** WARNING **************** Previous import merged additional branches but none have been specified on the command line for this import.\n""") # detect if nothing to do if (strategy.previous_upstream.hexsha == self.git.rev_parse(self.upstream)): self.log.notice("%s already at latest upstream commit: '%s'", self.branch, strategy.previous_upstream) if additional_commits is None: self.log.notice("Nothing to be imported") return True else: new_additional_commits = {Commit.new(self.repo, branch) for branch in self.extra_branches} if new_additional_commits == additional_commits: self.log.notice( """ No updated additional branch given, nothing to be done """) return True return False
def _check_tree_state(self): expected = getattr(self, 'expect_found', None) # even if empty want to confirm that find no changes applied, # otherwise confirm we find the expected number of changes. if expected is not None: if len(list(Commit.new(self.repo, self.target_branch).parents)) > 1: changes = list( Commit.iter_items( self.repo, '%s..%s^2' % (self.upstream_branch, self.target_branch), topo_order=True)) else: # allow checking that nothing was rebased changes = [] self.assertThat( len(changes), Equals(len(expected)), "should only have seen %s changes, got: %s" % (len(expected), ", ".join([ "%s:%s" % (commit.hexsha, commit.message.splitlines()[0]) for commit in changes ]))) # expected should be listed in order from oldest to newest, so # reverse changes to match as it would be newest to oldest. changes.reverse() for commit, node in zip(changes, expected): if node == "MERGE": continue subject = commit.message.splitlines()[0] node_subject = self.gittree.graph[node].message.splitlines()[0] self.assertThat( subject, Equals(node_subject), "subject '%s' of commit '%s' does not match " "subject '%s' of node '%s'" % (subject, commit.hexsha, node_subject, node))
def _check_tree_state(self): expected = getattr(self, 'expect_found', None) # even if empty want to confirm that find no changes applied, # otherwise confirm we find the expected number of changes. if expected is not None: if len(list(Commit.new(self.repo, self.target_branch).parents)) > 1: changes = list(Commit.iter_items( self.repo, '%s..%s^2' % (self.upstream_branch, self.target_branch), topo_order=True)) else: # allow checking that nothing was rebased changes = [] self.assertThat( len(changes), Equals(len(expected)), "should only have seen %s changes, got: %s" % (len(expected), ", ".join(["%s:%s" % (commit.hexsha, commit.message.splitlines()[0]) for commit in changes]))) # expected should be listed in order from oldest to newest, so # reverse changes to match as it would be newest to oldest. changes.reverse() for commit, node in zip(changes, expected): if node == "MERGE": continue subject = commit.message.splitlines()[0] node_subject = self.gittree.graph[node].message.splitlines()[0] self.assertThat(subject, Equals(node_subject), "subject '%s' of commit '%s' does not match " "subject '%s' of node '%s'" % ( subject, commit.hexsha, node_subject, node))