def test_generateDiffstat_with_CR(self): diff_bytes = ( "--- foo\t2009-08-26 15:53:23.000000000 -0400\n" "+++ foo\t2009-08-26 15:56:43.000000000 -0400\n" "@@ -1,1 +1,1 @@\n" " a\r-b\r c\r+d\r+e\r+f\r") self.assertEqual({'foo': (0, 0)}, Diff.generateDiffstat(diff_bytes))
def test_mergePreviewFromBranches(self): # mergePreviewFromBranches generates the correct diff. bmp, source_rev_id, target_rev_id = self.createExampleMerge() source_branch = bmp.source_branch.getBzrBranch() target_branch = bmp.target_branch.getBzrBranch() diff, conflicts = Diff.mergePreviewFromBranches( source_branch, source_rev_id, target_branch) transaction.commit() self.checkExampleMerge(diff.text)
def test_mergePreviewWithPrerequisite(self): # Changes introduced in the prerequisite branch are ignored. (source_bzr, source_rev_id, target_bzr, prerequisite_bzr, prerequisite) = self.preparePrerequisiteMerge() diff, conflicts = Diff.mergePreviewFromBranches( source_bzr, source_rev_id, target_bzr, prerequisite_bzr) transaction.commit() self.assertIn('+source text\n', diff.text) self.assertNotIn('+prerequisite text\n', diff.text)
def test_fromFile_withError(self): # If the diff is formatted such that generating the diffstat fails, we # want to record an oops but continue. diff_bytes = "not a real diff" diff = Diff.fromFile(StringIO(diff_bytes), len(diff_bytes)) oops = self.oopses[0] self.assertEqual('MalformedPatchHeader', oops['type']) self.assertIs(None, diff.diffstat) self.assertIs(None, diff.added_lines_count) self.assertIs(None, diff.removed_lines_count)
def _create_diff(self, content): # Create a Diff object with the content specified. sio = StringIO() sio.write(content) size = sio.tell() sio.seek(0) diff = Diff.fromFile(sio, size) # Commit to make the alias available for reading. transaction.commit() return diff
def test_mergePreviewWithNewerPrerequisite(self): # If the prerequisite branch has unmerged revisions, they do not # affect the diff. (source_bzr, source_rev_id, target_bzr, prerequisite_bzr, prerequisite) = self.preparePrerequisiteMerge() commit_file(prerequisite, 'file', b'prerequisite text2\n') diff, conflicts = Diff.mergePreviewFromBranches( source_bzr, source_rev_id, target_bzr, prerequisite_bzr) transaction.commit() self.assertNotIn('-prerequisite text2\n', diff.text) self.assertIn('+source text\n', diff.text) self.assertNotIn('+prerequisite text\n', diff.text)
def test_mergePreviewWithNewerPrerequisite(self): # If the prerequisite branch has unmerged revisions, they do not # affect the diff. (source_bzr, source_rev_id, target_bzr, prerequisite_bzr, prerequisite) = self.preparePrerequisiteMerge() commit_file( prerequisite, 'file', 'prerequisite text2\n') diff, conflicts = Diff.mergePreviewFromBranches( source_bzr, source_rev_id, target_bzr, prerequisite_bzr) transaction.commit() self.assertNotIn('-prerequisite text2\n', diff.text) self.assertIn('+source text\n', diff.text) self.assertNotIn('+prerequisite text\n', diff.text)
def generateIncrementalDiff(self, old_revision, new_revision, diff=None): """See `IBranchMergeProposal`.""" if diff is None: source_branch = self.source_branch.getBzrBranch() ignore_branches = [self.target_branch.getBzrBranch()] if self.prerequisite_branch is not None: ignore_branches.append(self.prerequisite_branch.getBzrBranch()) diff = Diff.generateIncrementalDiff(old_revision, new_revision, source_branch, ignore_branches) incremental_diff = IncrementalDiff() incremental_diff.diff = diff incremental_diff.branch_merge_proposal = self incremental_diff.old_revision = old_revision incremental_diff.new_revision = new_revision IMasterStore(IncrementalDiff).add(incremental_diff) return incremental_diff
def generateIncrementalDiff(self, old_revision, new_revision, diff=None): """See `IBranchMergeProposal`.""" if diff is None: source_branch = self.source_branch.getBzrBranch() ignore_branches = [self.target_branch.getBzrBranch()] if self.prerequisite_branch is not None: ignore_branches.append( self.prerequisite_branch.getBzrBranch()) diff = Diff.generateIncrementalDiff( old_revision, new_revision, source_branch, ignore_branches) incremental_diff = IncrementalDiff() incremental_diff.diff = diff incremental_diff.branch_merge_proposal = self incremental_diff.old_revision = old_revision incremental_diff.new_revision = new_revision IMasterStore(IncrementalDiff).add(incremental_diff) return incremental_diff
def test_fromFileSets_added_removed(self): """fromFile sets added_lines_count, removed_lines_count.""" diff = Diff.fromFile( StringIO(self.diff_bytes_2), len(self.diff_bytes_2)) self.assertEqual(5, diff.added_lines_count) self.assertEqual(4, diff.removed_lines_count)
def test_fromFileAcceptsBinary(self): diff_bytes = "Binary files a\t and b\t differ\n" diff = Diff.fromFile(StringIO(diff_bytes), len(diff_bytes)) self.assertEqual({}, diff.diffstat)
def test_fromFileSetsDiffstat(self): diff = Diff.fromFile(StringIO(self.diff_bytes), len(self.diff_bytes)) self.assertEqual( {'bar': (0, 3), 'baz': (2, 0), 'foo': (2, 1)}, diff.diffstat)
def test_generateDiffstat(self): self.assertEqual( {'foo': (2, 1), 'bar': (0, 3), 'baz': (2, 0)}, Diff.generateDiffstat(self.diff_bytes))
def test_providesInterface(self): verifyObject(IDiff, Diff())